hdu1557权利指数(二进制枚举)

在选举问题中,总共有n个小团体,每个小团体拥有一定数量的选票数。如果其中m个小团体的票数和超过总票数的一半,则此组合为“获胜联盟”。n个团体可形成若干个获胜联盟。一个小团体要成为一个“关键加入者”的条件是:在其所在的获胜联盟中,如果缺少了这个小团体的加入,则此联盟不能成为获胜联盟。一个小团体的权利指数是指:一个小团体在所有获胜联盟中成为“关键加入者”的次数。请你计算每个小团体的权利指数。
Input输入数据的第一行为一个正整数T,表示有T组测试数据。每一组测试数据的第一行为一个正整数n(02 1 10 7 5 7 4 8 6 7 5 Sample Output
1
16 22 16 24 20 22 16

该题目使用的是二进制枚举的思路:

首先使用二进制枚举所有情况,即枚举所有联盟的小组可能性(1000100010000011...... )
即使用1表示该小组存在一个联盟中 
继续枚举联盟中去除一个1(即表示小组),是否满足该组是关键加入者 

#include   
#include 
using namespace std;
const int maxn=25;  
int inf[maxn],ans[maxn];
int main()  
{  
	int ncase;
	cin>>ncase;
	while(ncase--){
		int n,sum;
		memset(ans,0,sizeof ans);
		cin>>n;
		sum=0;
		for(int i=0;i>inf[i];
			sum+=inf[i];
		}
		sum/=2;
		//暴力枚举 
		for(int i=0;i<(1<sum){
				for(int j=0;j




你可能感兴趣的:(一般题目)