• uva-301-枚举-组合


    题意:从A市到B市有n个站点,限制火车上搭乘的乘客数目,每个站点都从有一些乘车的订单,订单信息 从x到y,乘客m人,求解最大的收入是多少

    最多7个站,22个订单

    选取订单的时候没有顺序问题,所以不是全排列,是组合问题,一个订单俩种情况,拿OR不拿,所以是2^22次方种组合,

    pass数组用于记录拿了这些订单后火车在每个站点时的人数

    #include<stdio.h>
    #include<iostream>
    #include<sstream>
    #include<queue>
    #include<map>
    #include<memory.h>
    #include <math.h>
    #include<time.h>
    #include <stdlib.h>
    #include <algorithm>
    using namespace std;
    const int N = 110;
    
    class Node
    {
    public:
    	int s;
    	int e;
    	int num;
    	Node(int s, int e, int num)
    	{
    		this->s = s;
    		this->e = e;
    		this->num = num;
    	}
    	Node()
    	{
    		this->s = 0;
    		this->e = 0;
    		this->num = 0;
    	}
    };
    int limit;
    int station;
    int orders;
    int pass[9];
    Node node[25];
    int maxSum = -1;
    
    void read(int orders, Node nodes[])
    {
    	for(int i = 0; i < orders; i++)
    	{
    		Node node;
    		cin >> node.s >> node.e >> node.num;
    		nodes[i] = node;
    	}
    
    }
    
    void dfs(int cn, int sum)
    {
    	if(cn == orders)
    	{
    		maxSum = sum > maxSum ? sum : maxSum;
    		return;
    	}
    
    	int ok = 1;
    	int sn[10];
    	memset(sn,0,sizeof(sn));
    	for(int i = node[cn].s; i < node[cn].e; i++)
    		if(pass[i] + node[cn].num <= limit)
    		{
    			pass[i] += node[cn].num;
    			sn[i] = 1;
    		}
    		else
    		{
    			ok = 0;
    			break;
    		}
    	if(ok)
    		dfs(cn + 1, (node[cn].e - node[cn].s) * node[cn].num + sum);
    
    	for(int i = node[cn].s; i < node[cn].e; i++)
    		if(sn[i])
    			pass[i] -= node[cn].num;
    	dfs(cn + 1, sum);
    
    }
    
    int main()
    {
    	freopen("d:\1.txt", "r", stdin);
    	while ((cin >> limit >> station >> orders) && limit)
    	{
    		memset(pass, 0, sizeof(pass));
    		maxSum = -1;
    		read(orders, node);
    		dfs(0,0);
    		cout<<maxSum<<endl;
    
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    如何查看MySQL执行的每条SQL
    最简单的方式在linux上升级node.js版本
    快速理解字符串和编码
    macaca常见错误排查
    macaca自动化初体验
    F2eTest程序快捷方式安装到桌面
    centos下mysqlreport安装和使用
    前端纯css 图片的模糊处理
    gulp入门学习教程(入门学习记录)
    关于nodejs中npm命令没有反应的解决方法
  • 原文地址:https://www.cnblogs.com/shuiyonglewodezzzzz/p/7751251.html
Copyright © 2020-2023  润新知