题目描述:
设有 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
我一开始看题的时候以为是DP(因为这题跟人民币支付和寒冰王座有点像啊,但是想了一会发现其实不用DP啊),就是一个简单的……嗯……咋说呢……就是……算数,说不上什么算法之类的,就是枚举吧,先看代码:
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int o,v[100],p[1000]; int main() { for(int i=1;i<=6;i++) { scanf("%d",&v[i]); } for(int i=0;i<=v[1];i++) for(int j=0;j<=v[2];j++) for(int k=0;k<=v[3];k++) for(int l=0;l<=v[4];l++) for(int t=0;t<=v[5];t++) for(int y=0;y<=v[6];y++) p[i+2*j+3*k+5*l+10*t+20*y]=1; for(int i=1;i<=1000;i++) { if(p[i]) o++; } printf("Total=%d",o); return 0; }
不过要注意内存呐,数组不要开太大了。
这里有一个p[i+2*j+3*k+5*l+10*t+20*y]=1;操作,意思就是把p这个数组赋值为1,其实和bool的用法一样,目的就是为了有一种情况就加和,当然不仅局限于这一种写法哦( ̄▽ ̄)"