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;
}
uva-301-枚举-组合的更多相关文章
- c# (ENUM)枚举组合类型的谷歌序列化Protobuf
c# (ENUM)枚举组合类型的谷歌序列化Protobuf,必须在序列化/反序列化时加上下面: RuntimeTypeModel.Default[typeof(Alarm)].EnumPassthru ...
- 枚举进行位运算 枚举组合z
枚举进行位运算--枚举组合 public enum MyEnum { MyEnum1 = , //0x1 MyEnum2 = << , //0x2 MyEnum3 = << , ...
- 在C#中对枚举进行位运算--枚举组合
由于枚举的基础类型类型为基本的数值类型,支持位运算,因此可以使用一个值表示多个枚举的组合,在定义枚举时需要指定枚举数为2的幂指数方便进行位运算,即枚举数为1,2,4,8…,或1,1<<1, ...
- UVa 1151 (枚举 + MST) Buy or Build
题意: 平面上有n个点,现在要把它们全部连通起来.现在有q个套餐,如果购买了第i个套餐,则这个套餐中的点全部连通起来.也可以自己单独地建一条边,费用为两点欧几里得距离的平方.求使所有点连通的最小费用. ...
- UVa 12169 (枚举+扩展欧几里得) Disgruntled Judge
题意: 给出四个数T, a, b, x1,按公式生成序列 xi = (a*xi-1 + b) % 10001 (2 ≤ i ≤ 2T) 给出T和奇数项xi,输出偶数项xi 分析: 最简单的办法就是直接 ...
- UVa 140 (枚举排列) Bandwidth
题意较复杂,请参见原题=_=|| 没什么好说的,直接枚举每个排列就好了,然后记录最小带宽,以及对应的最佳排列. STL里的next_permutation函数真是好用. 比较蛋疼的就是题目的输入了.. ...
- Even Parity UVA - 11464 (枚举)
从来没有觉得枚举有多费脑子的.但是这道题还是很香的. 思路:就是非常简单的枚举啦. 从一般的枚举开始考虑.一般的做法就是在所有的格子中有两种状态1, 0. 而一共有225个格子,所有一共要枚举的情 ...
- UVa 1354 枚举子集 Mobile Computing
只要枚举左右两个子天平砝码的集合,我们就能算出左右两个悬挂点到根悬挂点的距离. 但是题中要求找尽量宽的天平但是不能超过房间的宽度,想不到要怎样记录结果. 参考别人代码,用了一个结构体的vector,保 ...
- hdu 2489 dfs枚举组合情况+最小生成树
大家都说,搜索是算法的基础.今天最这题就有体会了.在n个顶点里选择m个顶点,求最小生成树.用到了深搜的回溯.所有情况都能枚举. #include<iostream> #include< ...
- UVA 11609 - Teams 组合、快速幂取模
看题传送门 题目大意: 有n个人,选一个或者多个人参加比赛,其中一名当队长,如果参赛者相同,队长不同,也算一种方案.求一共有多少种方案. 思路: 排列组合问题. 先选队长有C(n , 1)种 然后从n ...
随机推荐
- Windows 服务器配置、运行、图文流程(新手必备!) - IIS建站配置一条龙
Window 2008 服务器的配置教程 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar ...
- How Many Tables 简单并查集
Today is Ignatius' birthday. He invites a lot of friends. Now it's dinner time. Ignatius wants to kn ...
- ssh-add时候提示Could not open a connection to your authentication agent
先执行下ssh-agent bash
- matplotlib 双y轴绘制及合并图例
关键函数:twinx() refer to: https://www.cnblogs.com/Atanisi/p/8530693.html
- 系列文章--从零开始学习ASP.NET MVC 1.0
从零开始学习ASP.NET MVC 1.0 (一) 开天辟地入门篇 从零开始学习 ASP.NET MVC 1.0 (二) 识别URL的Routing组件 从零开始学习 ASP.NET MVC 1.0 ...
- oracle之 11.2.0.4 bbed安装
一. bbed安装: 1.ORACLE 11G下安装BBED,需要从ORACLE 10G中复制三个包 sbbdpt.o .ssbbded.o 并将两个文件移到$ORACLE_HOME/rdbms/li ...
- uml 知识点
Unified Modeling Language (UML)又称统一建模语言或标准建模语言
- [C++ Primer] : 第10章: 泛型算法
概述 泛型算法: 称它们为"算法", 是因为它们实现了一些经典算法的公共接口, 如搜索和排序; 称它们是"泛型的", 是因为它们可以用于不同类型的元素和多种容器 ...
- EF 的一些不常用的功能
1.Add-Migration Initia-IgnoreChanges 生成已有数据库初始化代码 2.update-database -verbose 升级数据库并显示sql语句 3.Update- ...
- 论战大数据----胖子哥的PK之旅(一)
胖子哥(1106110976) 9:35:36 http://www.cnblogs.com/hadoopdev/p/3531963.htmlnosqlt数据库-肖(380594863) 9:38:0 ...