砝码称重
来源:NOIP1996(提高组) 第四题
【问题描述】
设有1g、2g、3g、5g、10g、20g的砝码各若干枚(其总重<=1000),用他们能称出的重量的种类数。
【输入文件】
a1 a2 a3 a4 a5 a6
(表示1g砝码有a1个,2g砝码有a2个,…,20g砝码有a6个,中间有空格)。
【输出文件】
Total=N
(N表示用这些砝码能称出的不同重量的个数,但不包括一个砝码也不用的情况)。
【输入样例】
1 1 0 0 0 0
【输出样例】
TOTAL=3
#include
#define maxl 1001
int dp[maxl];
int d[7]={0,1,2,3,5,10,20};
int num[7]={0};
int b[7]={0};
int main()
{
int i,j;
for(i=1;i<=6;i++)
{
scanf("%d",&num[i]);
b[i]=d[i]*num[i];
}
for(i=1;i<=6;i++)
{
for(j=maxl;j>=b[i];j--)
{
if(dp[j-b[i]]+b[i]>dp[j])
{
dp[j]=dp[j-b[i]]+b[i];
}
}
}
printf("%d\n",dp[maxl]);
return0;
}