uva 11825 - Hackers' Crackdown dp
2014-01-28 16:48
411 查看
题意
有n个节点,每个节点有m_i个邻居,每个人和邻居为一个整体,问最多可以分成几组使得每组并集合为全集
转移方程
![](http://img.blog.csdn.net/20140128162044109?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3pqeHk4ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
复杂度 3^n
有n个节点,每个节点有m_i个邻居,每个人和邻居为一个整体,问最多可以分成几组使得每组并集合为全集
转移方程
复杂度 3^n
/* author:jxy lang:C/C++ university:China,Xidian University **If you need to reprint,please indicate the source** */ #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> using namespace std; int node[20]; int ans[1<<17],cover[1<<17];//cover 预处理所有状态下集合并情况 int n; int main() { int C=0; while(~scanf("%d",&n)&&n) { int m,i,j,t; for(i=0;i<n;i++) { node[i]=1<<i; scanf("%d",&m); for(j=0;j<m;j++) { scanf("%d",&t); node[i]|=1<<t; } } int Max=(1<<n)-1,S,S0; for(S=1;S<=Max;S++) //预处理 { cover[S]=0; for(i=0;i<n;i++) if(S&(1<<i))cover[S]|=node[i]; } for(S=1;S<=Max;S++) //dp { ans[S]=0; for(S0=S;S0;S0=(S0-1)&S) { if(cover[S0]==Max)ans[S]=max(ans[S],ans[S^S0]+1); } } printf("Case %d: %d\n",++C,ans[S-1]); } }
相关文章推荐
- uva 11825 - Hackers' Crackdown dp
- uva 11825 ,Hacker's Crackdown 状态压缩 dp
- UVA 11825 - Hackers' Crackdown 状态压缩 dp 枚举子集
- uva 11825 Hackers' Crackdown(状态压缩DP)
- UVA 11825 Hackers' Crackdown 状态压缩dp
- UVA 11825 Hackers' Crackdown DP+状态压缩 -
- UVA 11825(Hacker's Crackdown-集合)
- UVA 11825 Hackers' Crackdown(状态压缩DP)
- [动态规划] 黑客的攻击 Hacker's CrackDown Uva 11825
- UVA 11825 - Hackers' Crackdown 状态压缩 dp 枚举子集
- UVa 11825 Hackers’ Crackdown / 状态压缩DP
- UVA 11825 Hackers' Crackdown - 状压dp
- Uva 11825 Hackers' Crackdown ACM解题报告(状压dp)
- uva 11825 - Hackers' Crackdown
- UVa 11825 Hackers' Crackdown(二进制压缩+DP)
- UVA 11825 Hackers' Crackdown
- UVA - 11825 Hackers' Crackdown
- uva_11825_Hackers' Crackdown (狀態壓縮DP,好題)
- UVA - 11825 Hackers' Crackdown 状态压缩
- Uva11825 - Hackers' Crackdown