It's not who you are underneath, it's what you do that defines you

背包DP——砝码称重(未完结)

砝码称重

内存限制:128 MiB时间限制:1000 ms标准输入输出
题目类型:传统评测方式:文本比较

题目描述

设有1g、2g、3g、5g、10g、20g的砝码各若干枚(其总重<=1000g)。求出用这些砝码能称出的不同重量的个数,但不包括一个砝码也不用的情况。

输入格式

只有一行,共有六个数,一次为1g、2g、3g、5g、10g、20g砝码的个数

输出格式

只有一行,为称出不同重量的个数

样例

样例输入

1 1 0 0 0 0

样例输出

Total=5

 

 

 

 1 #include<iostream> 
 2 #include<cstdio>
 3 using namespace std;
 4 int he,zhi[10]={0,1,2,3,5,10,20},ki,total,n,ge[1000005];
 5 int bag[1000005];
 6 int read()
 7 {
 8     char a=getchar();
 9     int k=0,fu=1;
10     while(a>'9'||a<'0')
11     {
12         if(a=='-')fu=-1;
13         a=getchar();
14     }
15     while(a>='0'&&a<='9')
16     {
17         k=k*10+a-'0';
18         a=getchar();
19     }
20     return k*fu;
21 }
22 int main()
23 {
24     for(int i=1;i<=6;i++)
25     {
26         ki=read();
27         he+=ki*zhi[i];
28         for(int j=1;j<=ki;j++)
29             ge[++n]=zhi[i];
30     }
31     bag[0]=1;
32     for(int i=1;i<=n;i++)
33     {
34         for(int j=he;j>=ge[i];j--)
35         {
36             bag[j]+=bag[j-ge[i]];
37         }
38     }
39     for(int i=1;i<=he;i++)
40         if(bag[i])total++;
41     cout<<"Total="<<total;
42     return 0;
43 }

 

posted @ 2019-07-30 12:04  lihaolin  阅读(312)  评论(0编辑  收藏  举报