-->
当前位置:首页 > 题库 > 正文内容

7-27 装载问题 (10 分)

Luz4年前 (2021-03-05)题库1775
7-27 装载问题 (10 分)

有一批共n (n<100) 个集装箱要装上2艘载重量分别为c1,c2的轮船,其中集装箱i的重量为wi,且要求确定是否有一个合理的装载方案可将这n个集装箱装上这2艘轮船。

输入格式:

第一行输入三个数n,c1,c2(<=10^7);第二行输入n个数,第i个数表示第i个集装箱的重量wi(<=10^5)。

输出格式:

如果能成功装载输出“YES”,否则输出“NO”

输入样例:

2 9 9
10 8

输出样例:

NO
作者
严华云
单位
湖州师范学院
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
   #include<stdio.h>  
   #define N 100  
   int c1,c2;  
   int n;  
   int w[N];   
   int flag[N]={0};  
   int r=0;   
   int cw=0;  
   int bw=0;  
 int choose[N];  
 void backtrack(int i){  
     int j;  
     if(i>n){  
         if(cw>bw){  
             bw=cw;  
             for(j=1;j<=n;j++){  
                 choose[j]=flag[j];  
             }  
         }  
         return ;  
     }  
     r-=w[i];  
     if(cw+w[i]<=c1){   
         cw+=w[i];  
         flag[i]=1;  
         backtrack(i+1);  
         cw-=w[i];  
         flag[i]=0;  
     }  
     if(cw+r>bw){  
         backtrack(i+1);  
     }   
     r+=w[i];  
 }  
 int main()  
 {  
     int i,sum=0;  
     scanf("%d %d %d",&n,&c1,&c2);  
     for(i=1;i<=n;i++){  
         scanf("%d",&w[i]);  
         r+=w[i];   
         sum+=w[i];   
     }  
     backtrack(1);  
     if(sum-bw<=c2){  
         printf("YES\n");  
     } else{  
         printf("NO\n");   
     }  
 }


发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。