解题思路
一个状态的子状态:
例:5=0101,它的子状态有0100,0001,0101.
手推可得:while(t) {t=(t-1)&s;}
可以得到s的所有子状态。。
代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int n,a[1<<16],f[1<<16];
int main(){
scanf("%d",&n);
for(int i=1;i<=(1<<n)-1;i++)
scanf("%d",&f[i]);
for(int s=1;s<=(1<<n)-1;s++)
{
int t=s;
while(t)
{
t=(t-1)&s;
f[s]=max(f[s],f[t]+f[s^t]);
}
}printf("%d",f[(1<<n)-1]);
}