题目描述
设有1g、2g、3g、5g、10g、20g的砝码各若干枚(其质量<=1000g),求出用他们能称出的质量的种类数(不包括质量为0的情况)。
输入
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三种不同的重量)
呵呵,这道题竟然是动态规划,纯暴力枚举,傻子都会。
代码:
#include <bits/stdc++.h>
using namespace std;
int f[10001],a[7];
int main()
{
int max1,ans=0;
for(int i=1;i<=6;i++)
{
cin>>a[i];
}
max1=a[1]+(a[2]*2)+(a[3]*3)+(a[4]*5)+(a[5]*10)+(a[6]*20);
for(int i=0;i<=a[1];i++)
{
for(int j=0;j<=a[2];j++)
{
for(int g=0;g<=a[3];g++)
{
for(int v=0;v<=a[4];v++)
{
for(int h=0;h<=a[5];h++)
{
for(int w=0;w<=a[6];w++)
{
f[i+j*2+g*3+v*5+h*10+w*20]=1;
}
}
}
}
}
}
for(int i=1;i<=max1;i++)
{
if(f[i]==1) ans++;
}
cout<<"Total="<<ans;
return 0;
}