搜索 bitset 砝码称重

刚看感觉很坑,但是用bitset的话就好很多

bitset用法就是当一个数组吧,然后把它当一个二进制数做吧

bitset的第i位是1就表示质量为i的能表示出来,如果为0就表示质量为i的不能被表示出来;

例如:bitset<2010> c;  c[1]=1;表示质量为1的物品能被称出来;c[2]=0;表示质量为2的物品不能被称出来。。。

所以最后bitset中有多少个1就有多少个能表示出来的质量。。。;b.accout() 就可以直接统计bitset中的1的个数 

具体代码就是我们每次搜索一个,所有之前能称出的质量加上他一定也能被称出来啦。。。;而且bitset可以当做一个二进制来做,其实还相当于我们进行了状态压缩;

#include
#include
#include
#include
using namespace std;
int n,m;
int a[1010];
bitset<2010> c;
int ans;
void dfs(int id,int sum,bitset<2010> b){
	if(sum==n-m+1){
	   ans=max(ans,(int)b.count() );
	   return;	
	}
	for(int i=id;i<=n;i++){
		dfs(i+1,sum+1,b<>n>>m;
	for(int i=1;i<=n;i++) cin>>a[i];
	c[0]=1;
	dfs(1,1,c);
	cout<

 

你可能感兴趣的:(搜索 bitset 砝码称重)