10680 飞机
2016-05-09 17:09
239 查看
10680 飞机
该题有题解
时间限制:1000MS 内存限制:65535K
提交次数:89 通过次数:27
题型: 编程题 语言: G++;GCC
Description
某国成立了一个新的航空公司。该公司准备采购飞机来运营属下的两条航线A与B。他们联系了一些飞机制造商,这些制造商提供了他们飞机的资料。
资料里面记录了每种飞机的载客量,以及他们飞航线A与航线B所需要的燃油量。
对于所有型号的飞机,他们可以采购任意数目。然而,他们正在怀疑,在燃油数目的限制下,他们的采购能否可以满足两条航线的客流量。
请写一个程序解决这个问题,作出回答。
输入格式
测试数据包括多组样例。数据以CASE开头,表示测试样例的数目。
对于每组样例,第1行有两个整数,n与fuel,表示供航空公司采购的飞机种类数目,以及他们每日能够采购到的燃油数目。
(1<=n<=1000, 0<=fuel <= 1000)
第2行有两个整数:p1,p2,表示两条航线每日的客流量。
第3行有n个整数:c1,c2,…,cn,每个数字表示第i个型号的飞机的载客量。
第4行有n个整数:f11,f12,…,f1n,每个数字表示第i个型号的飞机飞航线A的耗油量。
第5行有n个整数:f21,f 22,…,f2n,每个数字表示第i个型号的飞机飞航线B的耗油量。
输出格式
对于每个样例的输出均为一行,包括一个数字:0或者1。
如果采购商给出的飞机列表在燃油的限制条件下,能够满足两条航线的客流,输出1,否则输出0。
输入样例
2
3 16
299 499
100 200 250
2 3 4
3 5 6
3 17
299 499
100 200 250
2 3 4
3 5 6
输出样例
0
1
提示
第一个样例中,有3种飞机可供采购。但是由于每日燃油的限制,无论如何采购,都无法满足两条航线的载客任务。
第二个样例中,有3种飞机可供采购。航线A需要两架飞机运营:第1种飞机1架,第2种飞机1架。航线B需要2架飞机运营:第三种飞机2架。
这个解决方案每日的耗油量是2+3+6+6=17,满足题目要求。
来源 by PKKJ
题意:dp题,燃油量理解为物体重量,购得的燃油量理解为背包重量,载客量为物体价值,但该题除了要求物体重量要小于背包重量,还要求物体价值大于等于所给出的价值。
解题思路:同样建立dp[i],dp2[i]代表有i燃油量的情况下能获得的A或B线路最大载客量,当此时载客量大于等于A或B线路的最小载客量时,则标志i为A或B线路为最小燃油量,的状态方程为依然为dp[i]=max(dp[i],dp[i-f[j]]+c[j]);(f[j]为A线路燃油量,c为该飞机载客量),最后判断两个最小燃油量相加以后小于等于采购得的最小燃油量,如果是,输出1,否则输出0.
该题有题解
时间限制:1000MS 内存限制:65535K
提交次数:89 通过次数:27
题型: 编程题 语言: G++;GCC
Description
某国成立了一个新的航空公司。该公司准备采购飞机来运营属下的两条航线A与B。他们联系了一些飞机制造商,这些制造商提供了他们飞机的资料。
资料里面记录了每种飞机的载客量,以及他们飞航线A与航线B所需要的燃油量。
通过市场调查,该公司摸清了两条航线的日均客流量。已知该航空公司每日能够采购到一定数目的燃油。目前,该公司在制定采购计划,
对于所有型号的飞机,他们可以采购任意数目。然而,他们正在怀疑,在燃油数目的限制下,他们的采购能否可以满足两条航线的客流量。
请写一个程序解决这个问题,作出回答。
输入格式
测试数据包括多组样例。数据以CASE开头,表示测试样例的数目。
对于每组样例,第1行有两个整数,n与fuel,表示供航空公司采购的飞机种类数目,以及他们每日能够采购到的燃油数目。
(1<=n<=1000, 0<=fuel <= 1000)
第2行有两个整数:p1,p2,表示两条航线每日的客流量。
第3行有n个整数:c1,c2,…,cn,每个数字表示第i个型号的飞机的载客量。
第4行有n个整数:f11,f12,…,f1n,每个数字表示第i个型号的飞机飞航线A的耗油量。
第5行有n个整数:f21,f 22,…,f2n,每个数字表示第i个型号的飞机飞航线B的耗油量。
输出格式
对于每个样例的输出均为一行,包括一个数字:0或者1。
如果采购商给出的飞机列表在燃油的限制条件下,能够满足两条航线的客流,输出1,否则输出0。
输入样例
2
3 16
299 499
100 200 250
2 3 4
3 5 6
3 17
299 499
100 200 250
2 3 4
3 5 6
输出样例
0
1
提示
第一个样例中,有3种飞机可供采购。但是由于每日燃油的限制,无论如何采购,都无法满足两条航线的载客任务。
第二个样例中,有3种飞机可供采购。航线A需要两架飞机运营:第1种飞机1架,第2种飞机1架。航线B需要2架飞机运营:第三种飞机2架。
这个解决方案每日的耗油量是2+3+6+6=17,满足题目要求。
来源 by PKKJ
题意:dp题,燃油量理解为物体重量,购得的燃油量理解为背包重量,载客量为物体价值,但该题除了要求物体重量要小于背包重量,还要求物体价值大于等于所给出的价值。
解题思路:同样建立dp[i],dp2[i]代表有i燃油量的情况下能获得的A或B线路最大载客量,当此时载客量大于等于A或B线路的最小载客量时,则标志i为A或B线路为最小燃油量,的状态方程为依然为dp[i]=max(dp[i],dp[i-f[j]]+c[j]);(f[j]为A线路燃油量,c为该飞机载客量),最后判断两个最小燃油量相加以后小于等于采购得的最小燃油量,如果是,输出1,否则输出0.
#include <iostream> #include <cstdio> #include <cstring> int c[1005],f[1005],h[1005],dp[1005],dp2[1005]; using namespace std; int main() { int T,n,fuel,p,q,i,k; cin>>T; while(T--) { memset(dp,0,sizeof(dp));//初始化dp1 memset(dp2,0,sizeof(dp2));//初始化dp2 scanf("%d%d",&n,&fuel); scanf("%d%d",&p,&q); int min1=2000,min2=2000;//从最小耗油量的飞机开始计算 for(i=0;i<n;i++) { scanf("%d",&c[i]); } for(i=0;i<n;i++) { scanf("%d",&f[i]); min1=min(min1,f[i]); } for(i=0;i<n;i++) { scanf("%d",&h[i]); min2=min(min2,h[i]); } for(i=min1;i<=fuel;i++)//有i燃料量情况下,可以获得A线路的最大载客量 { for(int j=0;j<n;j++)//每架飞机判断一次 { if(i>=f[j]) { dp[i]=max(dp[i],dp[i-f[j]]+c[j]); } } if(dp[i]>=p)//如果满足最小载客量,则退出循环 break; } for(k=min2;k<=fuel;k++) { for(int j=0;j<n;j++) { if(k>=h[j]) { dp2[k]=max(dp2[k],dp2[k-h[j]]+c[j]); } } if(dp2[k]>=q) break; } if(i+k<=fuel)//如果A线路B线路所需最小燃油量小于可以采购得到的燃油量,输入1 printf("1\n"); else printf("0\n"); } return 0; }
相关文章推荐
- Floyd、Dijkstra、Bellman-Ford、SPFA的比较
- 排序算法
- [置顶] KMeans算法检测网络异常入侵
- The 3n + 1 problem
- UIButton文字居左显示
- 【Arduino官方教程第一辑】示例程序 3-3 模拟信号输出[Mega]
- rsync命令详解
- 字符串数组与字符串之间的互转(join/split)
- 二叉查找树中搜索区间
- Mysql主从复制
- TCP/IP协议学习之TCP、IP篇
- mysql存储引擎(一)
- 线程的问题
- Android中View绘制流程
- 简易聊天程序教程(六)主窗口和聊天窗口
- 常用类之Arrays
- volleyjar包,源码导入与关联
- oc中特殊字符的判断方法
- 【C语言】求二维数组最大值最小值平均值
- 8615 快乐