您的位置:首页 > 其它

砝码称重问题【dp】

2016-11-18 16:15 204 查看
设有 1g , 2g , 3g , 5g , 10g , 20g 的砝码各若干枚 ( 其 总重≤

1000g) ,要 求:

  

输入:

       a1   a2   a3   a4   a5   a6( 表示 1g 砝码有 a1 个, 2g 砝码有 a2

个, ......20g 砝码有 a6 个 )

 

输出:

       Total=N (N 表示用这些砝码能称出的不同重量的个数,但不包括

一个砝码也不用的情况 )

 

   输入样例: 1  1  0   0   0   0

   输出样例: Total=3 ,表示可以称出 1g , 2g , 3g 三种不同的重

量。

code:

#include<bits/stdc++.h>
using namespace std;

int main()
{
int dp[10005],n,s[7],num,sum=0,i,j,z,ans[1005];
int m[]={1,2,3,5,10,20};
cout<<"请输入1g,2g,3g,5g,10g,20g,每种砝码的个数"<<endl;
for(i=0;i<6;i++)
{
cin>>s[i];
sum+=s[i]*m[i];
}
memset(dp,0,sizeof(dp));
dp[0]=1;
dp[sum]=1;
for(i=0;i<6;i++)
for(j=0;j<s[i];j++)
for(z=sum;z>=m[i];z--)
if(dp[z-m[i]]==1)
dp[z]=1;
for(i=1,j=0;i<=sum;i++)
if(dp[i]==1)
{
num++;
ans[j++]=i;
}
cout<<"Total="<<num<<",表示可以称出 ";
for(i=0;i<j-1;i++){
cout<<ans[i]<<"g,";
}
cout<<ans[j-1]<<"g "<<j<<"种不同的重量。"<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: