砝码称重
内存限制: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 }