题目描述
设有1g、2g、3g、5g、10g、20g的砝码各若干枚(其总重<=1000),
输入输出格式
输入格式:
输入方式:a1 a2 a3 a4 a5 a6
(表示1g砝码有a1个,2g砝码有a2个,…,20g砝码有a6个)
输出格式:
输出方式:Total=N
(N表示用这些砝码能称出的不同重量的个数,但不包括一个砝码也不用的情况)
输入输出样例
输入样例#1:
1 1 0 0 0 0
输出样例#1:
Total=3
思路:
水题使我快乐;
来,上代码:
#include <cstdio> #include <iostream> using namespace std; int if_z,vi[10],ci[10],m,dp[1005],ans; char Cget; inline void in(int &now) { now=0,if_z=1,Cget=getchar(); while(Cget>'9'||Cget<'0') { if(Cget=='-') if_z=-1; Cget=getchar(); } while(Cget>='0'&&Cget<='9') { now=now*10+Cget-'0'; Cget=getchar(); } now*=if_z; } int main() { ci[1]=1,ci[2]=2,ci[3]=3,ci[4]=5,ci[5]=10,ci[6]=20; for(int i=1;i<=6;i++) { in(vi[i]); m+=vi[i]*ci[i]; } dp[0]=1; for(int i=1;i<=6;i++) { for(int j=1;j<=vi[i];j++) { for(int v=m;v>=ci[i];v--) dp[v]=max(dp[v],dp[v-ci[i]]); } } for(int i=1;i<=m;i++) if(dp[i]) ans++; cout<<"Total="<<ans; return 0; }