砝码称重(枚举法)
枚举算法的优化:
1.缩小枚举范围
2.减少枚举变量
3.使用其他算法
题目描述
设有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(能称出1g,2g,3g共三种)
解法一:枚举法(思路简单,但运行时间长)
#include<iostream>
using namespace std;
int main(){
int flag[1005]={0};
int n1,n2,n3,n5,n10,n20;
//cout<<"请依次输入1g,2g,3g,5g,10g,20g的砝码数量:";
cin>>n1>>n2>>n3>>n5>>n10>>n20;
for(int i1=0;i1<=n1;i1++){
for(int i2=0;i2<=n2;i2++){
for(int i3=0;i3<=n3;i3++){
for(int i5=0;i5<=n5;i5++){
for(int i10=0;i10<=n10;i10++){
for(int i20=0;i20<=n20;i20++){
int sum=i1+i2*2+i3*3+i5*5+i10*10+i20*20;
flag[sum]=1;
}
}
}
}
}
}
int count=0;
for(int i=1;i<=1000;i++){
if(flag[i]) count++;
}
cout<<count<<endl;
return 0;
}
其余解法学习之后将写在下一篇。
学习自bilibili。
有兴趣一起学,fighting~