## 砝码称重(枚举法

砝码称重(枚举法)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值