JZYZOJ 1382 光棍组织 状压dp
Posted 鲸头鹳
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JZYZOJ 1382 光棍组织 状压dp相关的知识,希望对你有一定的参考价值。
http://172.20.6.3/Problem_Show.asp?id=1382
水得过分了,本来以为要用lzx学长的写法写,抱着试试看的想法写了个特暴力的dp+dfs,过了,真是。。。
代码
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cmath> 6 using namespace std; 7 const int maxn=1<<16; 8 int n; 9 int a[maxn+10]={}; 10 int f[maxn+10]={},tot; 11 int vis[20]={}; 12 void dfs(int k,int num,int mm){ 13 if(k<=0){ 14 f[mm]=max(f[mm],f[mm-num]+f[num]); 15 return; 16 } 17 int x=1<<(vis[k]-1); 18 dfs(k-1,num,mm); 19 dfs(k-1,num+x,mm); 20 } 21 int main(){ 22 scanf("%d",&n); 23 int ma=1<<n; 24 for(int i=1;i<ma;i++){ 25 scanf("%d",&a[i]); 26 f[i]=a[i]; 27 }int x1; 28 for(int i=1;i<ma;i++){ 29 tot=0; 30 for(int j=1;j<=n;j++){ 31 x1=1<<(j-1); 32 if((x1|i)==i)vis[++tot]=j; 33 } 34 dfs(tot,0,i); 35 } 36 cout<<f[ma-1]<<endl; 37 return 0; 38 }
以上是关于JZYZOJ 1382 光棍组织 状压dp的主要内容,如果未能解决你的问题,请参考以下文章
HDU4057 Rescue the Rabbit(AC自动机+状压DP)