uva 11825 黑客的攻击 状态dp 典型
来源:互联网 发布:sql select两个表 编辑:程序博客网 时间:2024/06/05 23:50
第一想法是搜索,但有n^n种状态。
本题的数学模型可以是每台电脑和相连的电脑看作一个集合。p1,p2.....pn。要使停止的服务越多。要求从p中选出最多的字集,是每个子集的并集
为n台电脑都有。每个pi可以用整数的二进制位的状态表示。用dp,dp(i)=max{dp(i-j)}+1,i为是否选p1,p2....pn的状态表示,j是i的子集。
实现需要枚举i的子集。
/*uva 11825*/#include <stdio.h>#include <algorithm>#include <string.h>int main(int argc, char const *argv[]){// freopen("input","r",stdin);int n;int q=0;while(scanf("%d",&n),q++,n){int dp[1<<n];int A[1<<n];memset(A,false,sizeof(A));memset(dp,false,sizeof(dp));int p[20];int v=n;for(int i=0;i<n;i++){int m;scanf("%d",&m);p[i]=1<<i;for(int j=0;j<m;j++){int t;scanf("%d",&t);p[i]|=1<<t;}}for(int i=0;i<1<<n;i++){int t=i;for(int j=0;j<n;j++,t=t>>1)//不要写成t>>1if(t & 1)A[i]|=p[j];// printf("%da\n",A[i] );}int s=(1<<n)-1;//一定要加()for(int i=0;i<=s;i++){if(i==0){dp[i]=0;continue;}int j=i;do//枚举子集{if(A[j]==s){// printf("%d\n",j );dp[i]=dp[i]>dp[i & ~j]+1 ? dp[i]:dp[i & ~j]+1;}j=(j-1) & i;}while(j!=i);}printf("Case %d: %d\n",q,dp[s] );}return 0;}
0 0
- uva 11825 黑客的攻击 状态dp 典型
- NKOI 3720(UVA 11825)黑客的攻击
- 黑客的攻击(UVA 11825)
- uva 11825 黑客的攻击 Hackers' Crackdown 集合dp+我的优化 非常好的好题
- [动态规划] 黑客的攻击 Hacker's CrackDown Uva 11825
- 枚举,集合,动态规划(黑客的攻击,uva 11825)
- [UVA11825][状压DP]黑客的攻击
- uva11825(状态压缩+枚举子集)黑客的攻击
- uva 11825 状态压缩DP
- uva 11825(dp + 状态压缩)
- UVa 11825 状态压缩DP
- UVA 11825 状态压缩DP
- Uva 11825 - Hackers’ Crackdown 状态压缩DP
- UVA 11825 Hackers' Crackdown 状态压缩dp
- UVa 11825 Hackers’ Crackdown / 状态压缩DP
- UVA 11825 - Hackers' Crackdown(dp+状态压缩)
- UVA 11825 集合枚举 状态压缩 dp
- UVA 11825 Hackers' Crackdown DP+状态压缩 -
- 使用heroku进行免费分布式运算.Vs.AWS
- 马云: 带团队,你得问自己,人为什么要跟着你混?
- 题目1161:Repeater 题目16
- Qt 中使用 C++11
- (图解)Description Resource Path Location Type Java compiler level does not match the version of
- uva 11825 黑客的攻击 状态dp 典型
- javascript 加入收藏
- itoa 函数!!!(window平台下)
- POJ 1028----Web Navigation
- UI线程阻塞问题
- C之诡谲
- hdu2196 Computer 树形DP 树上点到其它点的最远距离
- python K-Means 实例二则
- ViewPager + Fragment 实现页面滑动