BZOJ 2064: 分裂 | 状压DP
题目:
http://www.lydsy.com/JudgeOnline/problem.php?id=2064
题解:
又自己写的
是个水题
超开心
的
#include<cstdio> #define N 2097152 using namespace std; int n,m,ed; int f[N],sum[N]; int main() { scanf("%d",&n); for(int i=0;i<n;i++)scanf("%d",&sum[1<<i]); scanf("%d",&m); for(int i=0;i<m;i++) { scanf("%d",&sum[1<<(n+i)]); sum[1<<(n+i)]=-sum[1<<(n+i)]; } n=n+m; ed=(1<<n)-1; for(int i=1;i<=ed;i++) { int t=i&(-i); sum[i]=sum[t]+sum[i-t]; for(int j=0;j<n;j++) if((i&(1<<j))>0) { int k=i-(1<<j); if(f[k]>f[i])f[i]=f[k]; } if(sum[i]==0)f[i]++; } printf("%d",n-2*f[ed]); return 0; }