装载问题



装载问题

描述:

有两艘船,载重量分别是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 n; int c1,c2; int w[100]; int b1[100];//当前最优解

  int Loading();

int main() {  while(1)  {   int i,sum;   scanf("%d %d %d",&c1,&c2,&n);   if(n==0&&(c1+c2)==0) return 0;   for(i=0;i<(c1+c2);i++)   {    b1[i]=0;   }      sum=0;   for(i=0;i<n;i++)   {    scanf("%d",&w[i]);    sum=sum+w[i];   }      if((sum-Loading())<=c2)   {    printf("Yes\n");   }   else printf("No\n");  } }

int Loading() {  int i,j;  for(i=0;i<n;i++)  {   for(j=c1;j>=w[i];j--)     b1[j]=(w[i]+b1[j-w[i]]>b1[j])?w[i]+b1[j-w[i]]:b1[j];     }  return b1[c1]; }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值