## 砝码称重(枚举法

砝码称重(枚举法)

枚举算法的优化:
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~

猜你喜欢

转载自blog.csdn.net/qq_46606018/article/details/113444901
今日推荐