水果配载

  2565 水果配载

Time Limit: 1 Sec  Memory Limit: 64 MB
Submit: 1042  Solved: 336

Description

水果销售公司接了一个单子,现要从公司将货运到火车站。水果都用箱子装好了,现有三种型号的,分别重量为910、462、和235kg的。现在有不同装载量的货车,请根据装载量给不同货车设计配载方案,使装载的重量总和最大。

Input

多个测试案例,每个一行,输入货车的最大装载量m(m不超过20000),最后一行是0,不需要处理

Output

每个测试案例输出分2行第一行输出"Solution A is:",然后是三种箱子各多少个,中间用一个空格隔开第二行输出"Load A is:",然后是总载重量其中A是第几个测试案例。

Sample Input

8000
0

Sample Output

Solution 1 is: 7 2 3
Load 1 is: 7999

用v[i]来做标记,作为需要累计的标志(踏板);
f[i][j]每一列为同种型号货物的累计;
是完全背包。
 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<stdbool.h>
 4 int f[20001][3];
 5 bool v[20001];
 6 int main()
 7 {
 8    // freopen("a.txt","r",stdin);
 9     int i,j,l,n,cas=0,w[3]={235,462,910};
10     while(scanf("%d",&n)&&n!=0)
11     {
12         cas++;
13         if(n<235)
14         {
15             printf("Solution %d is: 0 0 0\nLoad %d is: 0\n",cas,cas);
16             continue;
17         }
18         memset(v,false,sizeof(v));
19         memset(f,0,sizeof(f));
20         v[0]=true;
21         for(i=0;i<3;i++)
22             for(j=w[i];j<=n;j++)
23                 if(v[j-w[i]]&&!v[j])
24                 {
25                     for(l=0;l<3;l++)
26                     {
27                         if(l==i)
28                             f[j][l]=f[j-w[i]][l]+1;
29                         else
30                             f[j][l]=f[j-w[i]][l];
31                     }
32                     v[j]=true;
33                 }
34          for(n;n>=235;n--)
35             if(v[n])
36             {
37                 printf("Solution %d is: %d %d %d\nLoad %d is: %d\n",cas,f[n][2],f[n][1],f[n][0],cas,n);
38                 break;
39             }
40     }
41     return 0;
42 }
AC

 Acknowledge:小路 の Blog    http://blog.163.com/lu_jian_bin2006@126/blog/static/48789281200963083132137/

转载于:https://www.cnblogs.com/get-an-AC-everyday/p/4202854.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值