Gym-101291B Barbells(三进制枚举)

题目

给你n个杠铃,m个铁片

每个铁片可以加在杠铃的左边,或者右边,或者不加

但如果加的话,杠铃两边需要保持重量相同

然后问,所有合法的杠铃(可不加铁片或加相同重量的铁片)的重量

思路来源

https://blog.csdn.net/qq_36553623/article/details/74782502

题解

三进制枚举,

第i位为1代表给左边加第i块铁片,为2代表给右边加该铁片,为0代表不加

这样所有的集合都被枚举到了,

set维护这个可能高达3的14次方*14的集合就阔以了

实际也不会那么多

但隐隐约约觉得拿vector搞出来之后去重会超时

代码

#include 
#include  
#include 
#include 
#include 
#include 
typedef long long ll;
using namespace std;
int n,m,tmp;
ll a[15],b[15];
setans;
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=0;i::iterator it=ans.begin();it!=ans.end();++it)
	printf("%lld\n",*it);
	return 0;
} 

 

你可能感兴趣的:(思维题,三进制枚举,思维)