时限:1000ms 内存限制:10000K 总时限:3000ms
描述:
有两艘船,载重量分别是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<stdio.h> int c1,c2,n,w[10];//待输入数据 int weight=0,max=0; void search(int m)//0,1,2...n { if(m==n) { if(weight<=c1 )//船一放得下 if(weight>=max)//能放更多到船一 max=weight; } else { if(weight+w[m]<=c1)//取重量为w[m]的集装箱(满足取的条件) { weight += w[m]; search(m+1); weight -=w[m]; } search(m+1);//不取重量为w[m]的集装箱(不满足取的条件或满足也不取) } } int main() { int i,sum=0; scanf("%d%d%d",&c1,&c2,&n);//船一,船二的载重c1,c2,集装箱的个数n while(n!=0) { for(i=0;i<n;i++) { scanf("%d",&w[i]);//每个集装箱重量 sum += w[i];//集装箱总重量 } search(0); if(sum-max<=c2) printf("Yes\n"); else printf("No\n"); max=0; sum=0; scanf("%d%d%d",&c1,&c2,&n); } return 0; }