题目地址:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2925

题目意思:

有N台机器,每台机器上有N个服务

你可以对每台机器选择关闭他以及和他相邻的机器的一种服务

当所有机器不能运行一个服务时,就是摧毁了一种服务

问你最多能摧毁多少个服务

解题思路:

这道题是大白上DP的一道例题,十分经典

对于每一个机器机器相邻的机器我们叫做Pi

那么我们就是要将Pi(i from 1 to n)尽量多的分组,使得他们的并为全集

然后在这个分组里面就可以摧毁一个服务,尽量多的分组,就是为了尽量多的摧毁服务

集合的表示和以用二进制来做,这个十分的经典

然后我们再来枚举分组的组合,用S来表示,COVER[S]就是表示这个分组的并

那么我们可以找到一个递推式

令F[S]表示以S分组的摧毁数,那么F[S] = MAX(F[S^S0],COVER[S0]为全集)+1,这里要想清楚为什么

因为S0是S的一个子集,当S0的并为全集的时候,就相当于在S0的补集上+1了,这样就清楚了

其中LRJ的代码中枚举子集的代码页很美,可以自己观摩观摩

代码本身就是学的大白的,只是说说自己的体会,见笑了。

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; const int maxn = 1<<17; int f[maxn];
int cover[maxn];
int n,m;
int p[20]; int main()
{
int ca=1;
while(~scanf("%d",&n) && n)
{
for(int i=0;i<n;i++)
{
scanf("%d",&m);
int x;
p[i] = 1<<i;
while(m--)
{
scanf("%d",&x);
p[i] |= (1<<x);
}
} for(int s=0;s<(1<<n);s++)
{
cover[s] = 0;
for(int i=0;i<n;i++)
{
if(s & (1<<i))
cover[s] |= p[i];
}
} f[0]=0;
int all = (1<<n)-1; for(int s=1;s<(1<<n);s++)
{
f[s]=0;
for(int s0=s;s0;s0=(s0-1)&s)
{
if(cover[s0]==all)
f[s] = max(f[s],f[s^s0]+1);//这里的解释是当S中的自己S0可以的时候,这相对于补集+1
}
} printf("Case %d: %d\n",ca++,f[all]);
}
return 0;
}

Hackers’ Crackdown-----UVA11825-----DP+状态压缩的更多相关文章

  1. HDU 4336 Card Collector (期望DP+状态压缩 或者 状态压缩+容斥)

    题意:有N(1<=N<=20)张卡片,每包中含有这些卡片的概率,每包至多一张卡片,可能没有卡片.求需要买多少包才能拿到所以的N张卡片,求次数的期望. 析:期望DP,是很容易看出来的,然后由 ...

  2. HDU 1074 Doing Homework (dp+状态压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1074 题目大意:学生要完成各科作业, 给出各科老师给出交作业的期限和学生完成该科所需时间, 如果逾期一 ...

  3. hdu_4352_XHXJ's LIS(数位DP+状态压缩)

    题目连接:hdu_4352_XHXJ's LIS 题意:这题花大篇篇幅来介绍电子科大的一个传奇学姐,最后几句话才是题意,这题意思就是给你一个LL范围内的区间,问你在这个区间内最长递增子序列长度恰为K的 ...

  4. hdu 4352 数位dp + 状态压缩

    XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  5. 【bzoj1076】[SCOI2008]奖励关 期望dp+状态压缩dp

    题目描述 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后也不能再 ...

  6. hdu4336 Card Collector(概率DP,状态压缩)

    In your childhood, do you crazy for collecting the beautiful cards in the snacks? They said that, fo ...

  7. dp状态压缩

    dp状态压缩 动态规划本来就很抽象,状态的设定和状态的转移都不好把握,而状态压缩的动态规划解决的就是那种状态很多,不容易用一般的方法表示的动态规划问题,这个就更加的难于把握了.难点在于以下几个方面:状 ...

  8. 洛谷 1052 dp 状态压缩

    洛谷1052 dp 状态压缩 传送门 (https://www.luogu.org/problem/show?pid=1052#sub) 做完这道题之后,感觉涨了好多见识,以前做的好多状压题目都是将一 ...

  9. NOIP2005过河[DP 状态压缩]

    题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数 ...

  10. ACM: HDU 5418 Victor and World - Floyd算法+dp状态压缩

    HDU 5418 Victor and World Time Limit:2000MS     Memory Limit:131072KB     64bit IO Format:%I64d & ...

随机推荐

  1. 为网上流行论点“UIAutomator不能通过中文文本查找控件”正名

    1. 问题描述和起因 相信大家学习UIAutomator一开始的时候必然会看过一下这篇文章. Android自动化测试(UiAutomator)简要介绍 因为你在百度输入UIAutomator搜索的时 ...

  2. 快速构建Windows 8风格应用16-SettingContract原理及构建

    原文:快速构建Windows 8风格应用16-SettingContract原理及构建 本篇博文主要介绍Setting Contract概述.Setting Contract实现基本原理.如何构建Se ...

  3. .NET的DTO映射工具AutoMapper

    .NET的DTO映射工具AutoMapper 原文:https://github.com/AutoMapper/AutoMapper/wiki/Getting-started 参考:http://ww ...

  4. 2.1 LINQ的查询表达式

    在进行LINQ查询的编写之前,首先需要了解查询表达式.查询表达式是LINQ查询的基础,也是最常用的编写LINQ查询的方法. 查询表达式由查询关键字和对应的操作数组成的表达式整体.其中,查询关键字是常用 ...

  5. SQL Server 性能调优 之运行计划(Execution Plan)调优

    运行计划中的三种 Join 策略 SQL Server 存在三种 Join 策略:Hash Join,Merge Join,Nested Loop Join. Hash Join:用来处理没有排过序/ ...

  6. bundle install 出现 &#39;gem install mysql2 -v &#39;0.3.15&#39; succeeds before bunding &#39;

    bundle install 出现  'gem install mysql2 -v '0.3.15' succeeds before bunding ' 解决:sudo apt-get install ...

  7. dos下的cd指令

    进入同根目录下的目录: 1.进入同根目录的下一级目录:cd 目录名 2.返回同根目录的上一级目录:cd .. 3.返回目录的根目录:cd \ 进入不同根目录下的目录: 1.进入另外一个根目录(的默认目 ...

  8. MVC 控制器

    ASP.NET MVC控制器(一) 前言 在路由的篇章中讲解了路由的作用,讲着讲着就到了控制器部分了,从本篇开始来讲解MVC中的控制器,控制器是怎么来的?MVC框架对它做了什么?以及前面有的篇幅所留的 ...

  9. 使用ReSharper打造团队代码

    当前标签: 漂亮代码   请看高质量的代码——更新 Leo C.W 2014-04-01 19:16 阅读:544 评论:5   我们的终极编码规范 Leo C.W 2014-03-31 22:34 ...

  10. Birdge(桥接)模式

    1.出现原因 1.同一个类型,有两个变化的维度(两个维度的抽象:一个抽象部分的抽象,一个实现部分的抽象) 2.如何应对这种“多维度的变化”?如何利用面向对象技术来使得同一类型可以轻松地沿着两个方向变化 ...