装载问题(西农Oj) 解题报告
来源:互联网 发布:软件测试自动化 pdf 编辑:程序博客网 时间:2024/05/22 13:55
描述:
有两艘船,载重量分别是c1、 c2,n个集装箱,重量是wi (i=1…n),且所有集装箱的总重量不超过c1+c2。确定是否有可能将所有集装箱全部装入两艘船。
输入:
多个测例,每个测例的输入占两行。第一行一次是c1、c2和n(n<=10);第二行n个整数表示wi (i=1…n)。n等于0标志输入结束。
输出:
对于每个测例在单独的一行内输出Yes或No。
输入样例:
7 8 2
8 7
7 9 2
8 8
0 0 0
输出样例:
Yes
No
解题思路:要使之能够多的装载集装箱,应使得每装集装箱的,和船的容量比一下,和哪个船的差值大的就装入这个集装箱里,保证能够有更多的空间装箱子。
代码如下:
- #include<iostream>
- using namespace std;
- int main()
- {
- int c1,c2,n;
- while(1)
- {
- int state=0;
- cin>>c1>>c2>>n;
- if(c1==0&&c2==0&&n==0)
- return 0;
- while(n)
- {
- int wi;
- cin>>wi;
- if(wi<=c1||wi<=c2)
- {
- if(wi>c1)
- c2=c2-wi;
- else if(wi>c2)
- c1=c1-wi;
- else
- {
- if(c1-wi>c2-wi)
- c1=c1-wi;
- else
- c2=c2-wi;
- }
- if(c1<0||c2<0)
- {
- cout<<"No"<<endl;
- int state=1;
- break;
- }
- }
- else
- {
- cout<<"No"<<endl;
- state=1;
- break;
- }
- n--;
- }
- if(c1<0||c2<0)
- cout<<"No"<<endl;
- if(state==0)
- cout<<"Yes"<<endl;
- }
- return 0;
- }
当然也可以用这种思想去做:求出不超过c1的最大值max,若总重量-max < c2则能装入到两艘船。
在求max的时候用到回溯法,物品只有两种状态,那么放进去要么没放在这个集装箱里。
代码如下:
- #include<iostream>
- using namespace std;
- const int max(12);
- int c1,c2,n;
- int weight;
- int best;
- int boxw[max];
- void backtrack(int a)
- {
- if(a==n)
- {
- if(weight>best)
- best=weight;
- return ;
- }
- if(weight+boxw[a]<=c1)
- {
- weight=weight+boxw[a];
- backtrack(a+1);
- weight=weight-boxw[a];
- }
- backtrack(a+1);
- }
- int main()
- {
- while(1)
- {
- int sum=0;
- cin>>c1>>c2>>n;
- if(c1==0&&c2==0&&n==0)
- break;
- for(int i=0;i<n;i++)
- {
- cin>>boxw[i];
- sum+=boxw[i];
- }
- best=weight=0;
- backtrack(0);
- if(sum-best<=c2)
- cout<<"Yes"<<endl;
- else
- cout<<"No"<<endl;
- }
- return 0;
- }
- 装载问题(西农Oj) 解题报告
- 装载问题 解题报告
- [九度OJ]货币问题,解题报告
- NIT-OJ-1449-最少硬币问题-解题报告
- 南阳oj-29(求转置矩阵问题)解题报告
- 【九度OJ】题目1153:括号匹配问题 解题报告
- uva oj 10603 解题报告
- uva oj 10905 解题报告
- uva oj 714解题报告
- hdu oj 1978解题报告
- hdu oj 1010解题报告
- 九度OJ解题报告
- [LeetCode OJ] Candy 解题报告
- OJ解题报告 4976:硬币
- 杭电OJ 1102(Constructing Roads)解题报告
- 杭电OJ 1671解题报告(字典树模板)
- 堡垒问题(贪心) 解题报告
- 解题报告-HDOJ-1086(几何问题)
- 先了解了解DirectX
- javascript特效大全
- 寻找google免费企业邮箱的方法
- hello
- google免费企业邮箱进入路径
- 装载问题(西农Oj) 解题报告
- 程序员容易进入的一种状态
- start
- ..
- DIV+CSS布局的一则技巧
- Visual Studio 2010 下载,安装,激活,序列号,注册码,下载地址(全集) 附Visual Studio 2
- php常用的正则表达式
- C#运行EXE程序
- 使用Process类对进程进行管理