您的位置:首页 > 其它

砝码称重

2015-08-16 11:26 197 查看
【问题描述】

设有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

【问题分析】

把问题稍做一个改动,已知a1+a2+a3+a4+a5+a6个砝码的重量w[i], w[i]∈{ 1,2,3,5,10,20} 其中砝码重量可以相等,求用这些砝码可称出的不同重量的个数。

这样一改就是经典的0/1背包问题的简化版了,求解方法完全和上面说的一样,这里就不多说了,只是要注意这个题目不是求最大载重量,是统计所有的可称出的重量的个数。
#include<stdio.h>
#include<string.h>
int main()
{
int m=0,c[10],i,j,sum=0,k,a[100];
int w[6]={1,2,3,5,10,20};
for (i=0;i<6;i++)
{
scanf("%d",&c[i]);
sum+=(c[i]*w[i]);
}
memset(a,0,sizeof(a));
a[0]=1;
for (i=0;i<6;i++)
for (j=0;j<c[i];j++)
for (k=sum;k>=w[i];k--)
if (a[k-w[i]]==1&&!a[k])
{
a[k]=1;
m++;
}
printf("%d\n",m);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: