【NOIP1996提高】砝码称重
Description
设有1g、2g、3g、5g、10g、20g的砝码各若干枚(其总重<=1000),要求
Input
输入方式:a1 a2 a3 a4 a5 a6(表示1g砝码有a1个,2g砝码有a2个,…,20g砝码有a6个)
Output
输出方式:Total=N(N表示用这些砝码能称出的不同重量的个数,但不包括一个砝码也不用的情况)
Sample Input
1 1 0 0 0 0 (注:下划线表示空格)
Sample Output
TOTAL=3 表示可以称出1g,2g,3g三种不同的重量
#include <stdio.h>
#include <stdlib.h>
#define MAXN 1001
#define NUM 6
int main()
{
int i, j, k, sum, counts[NUM], a[NUM] = {1, 2, 3, 5, 10, 20}, f[NUM+1][MAXN] = {0};
for (i=0; i<NUM; i++)
scanf("%d", counts + i);
for (i=1; i<=NUM; i++)
{
for (j=0; j<MAXN; j++)
{
if (f[i-1][j] == 1)
{
f[i][j] = 1;
}
else
{
for (k=1; k<=counts[i-1]; k++)
{
if (j > k * a[i-1] && f[i-1][j-k*a[i-1]] == 1)
{
f[i][j] = 1;
break;
}
else if (j == k*a[i-1])
{
f[i][j] = 1;
break;
}
}
}
}
}
sum = 0;
for (i=1; i<MAXN; i++)
{
if (f[6][i] == 1)
sum++;
}
printf("%d\n", sum);
return 0;
}