Transportation poj1040
the way. The stations are successively numbered, city A station has number 0, city B station number m. The company runs an experiment in order to improve passenger transportation capacity and thus to increase its earnings. The train has a maximum capacity
n passengers. The price of the train ticket is equal to the number of stops (stations) between the starting station and the destination station (including the destination station). Before the train starts its route from the city A, ticket orders are collected
from all onroute stations. The ticket order from the station S means all reservations of tickets from S to a fixed destination station. In case the company cannot accept all orders because of the passenger capacity limitations, its rejection policy is that
it either completely accept or completely reject single orders from single stations.
Write a program which for the given list of orders from single stations on the way from A to B determines the biggest possible total earning of the TransRuratania company. The earning from one accepted order is the product of the number of passengers included
in the order and the price of their train tickets. The total earning is the sum of the earnings from all accepted orders.
Input
ticket order consists of three integers: starting station, destination station, number of passengers. In one block there can be maximum 22 orders. The number of the city B station will be at most 7. The block where all three numbers in the first line are equal
to zero denotes the end of the input file.
Output
Sample Input
10 3 4
0 2 1
1 3 5
1 2 7
2 3 10
10 5 4
3 5 10
2 4 9
0 2 5
2 5 8
0 0 0
Sample Output
19
34
(1)题意:火车运输,n个车站编号0-(n-1)。之间有非常多订单,问你,最大收益是多少?火车的载客量一定,车上的人不能超过这个数,先给你3个数。火车载客量m、车站数n、订单数p。然后p行数据,每行3个数。分别代表订单的起点、终点和人数。
(2)解法:先对订单进行排序,按起点站先后排,若一样,按终点排,然后对订单进行深度搜索。剪枝:遇到人数超过载客量的时候,就返回。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
using namespace std;
struct Rac{
int start;
int end1;
int num;
}p[30];
int lode,station,order;
int maxmoney;
int people[30]={0}; //表示到i站的人数,。people[2]表示站1到站二的人数
void DFS(int ding,int money) //第几订单。钱。
{
if(ding==order)
{
maxmoney=max(maxmoney,money);
return ;
}
int i,j,flag=1;
for(i=p[ding].start+1;i<=p[ding].end1;i++) //推断人人数是否超了
{
if(people[i]+p[ding].num>lode)
{
flag=0;
break;
}
}
if(flag==1) //第ding条订单符合条件~~
{
for(i=p[ding].start+1;i<=p[ding].end1;i++) people[i]=people[i]+p[ding].num; //start到end站都加上该订单人数
DFS(ding+1,money+(p[ding].end1-p[ding].start)*p[ding].num);
for(i=p[ding].start+1;i<=p[ding].end1;i++) people[i]=people[i]-p[ding].num;//恢复
}
DFS(ding+1,money); //不要该订单;
}
bool cmp(struct Rac a,struct Rac b)
{
if(a.start!=b.start) return a.start<b.start;
else return a.end1<b.end1;
}
int main()
{
//freopen("test.txt","r",stdin);
while(scanf("%d %d %d",&lode,&station,&order),lode!=0||station!=0||order!=0)
{
int i;
for(i=0;i<order;i++) scanf("%d %d %d",&p[i].start,&p[i].end1,&p[i].num);
sort(p,p+order,cmp);
// for(i=0;i<order;i++) printf("%d %d %d\n",p[i].start,p[i].end1,p[i].num);
memset(people,0,sizeof(people));
maxmoney=0;
DFS(0,0);
printf("%d\n",maxmoney);
}
}
Transportation poj1040的更多相关文章
- POJ1040 Transportation
题目来源:http://poj.org/problem?id=1040 题目大意: 某运输公司要做一个测试.从A城市到B城市的一条运输线路中有若干个站,将所有站包括A和B在内按顺序编号为0到m.该路线 ...
- poj1040 Transportation(DFS)
题目链接 http://poj.org/problem?id=1040 题意 城市A,B之间有m+1个火车站,第一站A站的编号为0,最后一站B站的编号为m,火车最多可以乘坐n人.火车票的票价为票上终点 ...
- POJ 1797 Heavy Transportation(最大生成树/最短路变形)
传送门 Heavy Transportation Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 31882 Accept ...
- 【HDU 4940】Destroy Transportation system(无源无汇带上下界可行流)
Description Tom is a commander, his task is destroying his enemy’s transportation system. Let’s repr ...
- Heavy Transportation(最短路 + dp)
Heavy Transportation Time Limit:3000MS Memory Limit:30000KB 64bit IO Format:%I64d & %I64 ...
- POJ 1797 Heavy Transportation (Dijkstra变形)
F - Heavy Transportation Time Limit:3000MS Memory Limit:30000KB 64bit IO Format:%I64d & ...
- poj 1797 Heavy Transportation(最短路径Dijkdtra)
Heavy Transportation Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 26968 Accepted: ...
- POJ 1797 Heavy Transportation
题目链接:http://poj.org/problem?id=1797 Heavy Transportation Time Limit: 3000MS Memory Limit: 30000K T ...
- uva301 - Transportation
Transportation Ruratania is just entering capitalism and is establishing new enterprising activiti ...
随机推荐
- 7月14号day6总结
今天学习过程和总结 IOC和DIO IOC相当于一个容器,在容器中加注解.接口存在意义依赖注入.4个注解都行,依赖注入只能发生在IOC容器里, pring IOC 容器可以管理Bean 的生命周期,S ...
- 前端模块加载规范AMD与CMD小记
AMD代表:requirejs: CMD代表:seajs: AMD CMD 代表 requirejs seajs 执行 提前加载,不管是否调用模块,先解析所以模块 提前加载,在真正需要使 ...
- hbase异常:java.io.IOException: Unable to determine ZooKeeper ensemble
项目中用到hbase,有时候可能会报一些异常,比如java.io.IOException: Unable to determine ZooKeeper ensemble 等等,当出现这个问题时,根据个 ...
- postman的使用(转载)
Postman介绍 Postman是google开发的一款功能强大的网页调试与发送网页HTTP请求,并能运行测试用例的的Chrome插件.其主要功能包括: 模拟各种HTTP requests 从常用的 ...
- 程序员利用javascript代码开发捕鱼游戏
面试这么成功,全靠这个捕鱼游戏来完成,看的就是里面javascript代码,所以说前端最重要的还是javascript这一关,不管是现在HTML5时代还是以后如何,javascript永远不会落后,大 ...
- ReactiveCocoa(二)
前言 通过ReactiveCocoa(一)的学习,相信大家对ReactiveCocoa有了一些基本认识吧.下面就让我们来学习ReactiveCocoa的一些基本使用吧! ReactiveCocoa基本 ...
- [BZOJ 1037] 生日聚会Party
Link: BZOJ 1037 传送门 Solution: 由于对任意一段都有要求,于是我们对于所有前缀考虑其后缀不超过$k $即可: 设$dp[i][j][x][y]$为前$i$个人中有$j$个男孩 ...
- 【codevs1907】【方格取数3】二分图最大带权独立集
[pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=59001242 向大(hei)佬(e)势力学(di ...
- openresty的lua_package_path
文档 lua_package_path可以配置openresty的文件寻址路径.官网文档如下: # 设置纯 Lua 扩展库的搜寻路径(';;' 是默认路径): lua_package_path '/f ...
- java读取配置文件(properties)的时候,unicode码转utf-8
有时我们在读取properties结尾的配置文件的时候,如果配置文件中有中文,那么我们读取到的是unicode码的中文,需要我们在转换一下,代码如下 /** * 将配置文件中的Unicode 转 ut ...