开始看到这题写的是dfs 后来又看到母函数 然后看到觉得状态压缩应该也可以
总的来说 这题真的很简单。。想想都可以直接暴力的。。
就是把状态用二进制表示而已
结果没想到 不用全部状态存下来 再减一个比一个 直接跟sumw/2 比较就知道相对大小了
哎。。。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int sumw,n;
int w[25],ans[25];
int main()
{
int i,j,tmp,t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
memset(ans,0,sizeof ans);
for(i=0,sumw=0;i<n;i++)
{
scanf("%d",&w[i]);
sumw+=w[i];
}
sumw/=2;
for(i=0;i<(1<<n);i++)
{
tmp=0;
for(j=0;j<n;j++)
if((1<<j)&i)
tmp+=w[j];
if(tmp>sumw)
for(j=0;j<n;j++)
if((1<<j)&i)
if((tmp-w[j])<=sumw)
ans[j]++;
}
for(i=0;i<n-1;i++)
printf("%d ",ans[i]);
printf("%d\n",ans[n-1]);
}
return 0;
}