您的位置:首页 > 编程语言 > PHP开发

动态规划——背包系列之砝码称重

2011-08-23 15:56 369 查看
【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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  input output