HDU 6149 Valley Numer II (状压DP 易错题)
题目大意:给你一个无向连通图(n<=30),点分为高点和低点,高点数量<=15,如果两个高点和低点都直接连边,那么我们称这三个点形成一个valley,每个点最多作为一个valley的组成部分,求valley的最大数量
高点状压,然后枚举低点,判断这个低点能否影响答案
注意:上一层的值要全都先赋给这一层,再枚举这一层,否则上一层的某些状态可能还没枚举到就枚举这一层了
(比如上一层可行的状态是0110,这一层新来了1001,我们要先把0110和1001赋给这一层,否则我们在从小到大先枚举0110时,这一层的状态0110以及1001并没有被上一层更新,导致转移出错
#include <cstdio>
#include <algorithm>
#include <cstring>
#define N 35
using namespace std; int T,n,m,K,cnt;
int d[N][N],up[N],dn[N],use[N];
int f[][(<<)+];
void clr()
{
memset(d,,sizeof(d));
memset(up,,sizeof(up));
memset(dn,,sizeof(dn));
memset(use,,sizeof(use));
memset(f,,sizeof(f));
cnt=;
} int main()
{
//freopen("aa.in","r",stdin);
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&n,&m,&K);
clr();
int x,y;
for(int i=;i<=m;i++)
{
scanf("%d%d",&x,&y);
d[x-][y-]=d[y-][x-]=;
}
for(int k=;k<K;k++)
{
scanf("%d",&x);
up[k]=x-;
use[x-]=;
}
for(int i=;i<n;i++) if(!use[i]) dn[++cnt]=i;
for(int k=;k<=cnt;k++) f[k][]=;
for(int k=;k<=cnt;k++)
{
for(int s=;s<(<<K);s++) {f[k][s]=f[k-][s];}
for(int s=;s<(<<K);s++)
for(int i=;i<K;i++)
if(!((<<i)&s)&&d[up[i]][dn[k]])
for(int j=;j<K;j++)
if(i!=j&&!((<<j)&s)&&d[dn[k]][up[j]])
f[k][s|(<<i)|(<<j)] = max(f[k][s|(<<i)|(<<j)],f[k-][s]+);
}
int ans=;
for(int s=;s<(<<K);s++)
ans=max(ans,f[cnt][s]);
printf("%d\n",ans);
}
return ;
}
HDU 6149 Valley Numer II (状压DP 易错题)的更多相关文章
- HDU 6149 Valley Numer II 状压DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6149 题意:中文题目 解法:状压DP,dp[i][j]代表前i个低点,当前高点状态为j的方案数,然后枚 ...
- HDU 6149 Valley Numer II(状压DP)
题目链接 HDU6149 百度之星复赛的题目……比赛的时候并没有做出来. 由于低点只有15个,所以我们可以考虑状压DP. 利用01背包的思想,依次考虑每个低点,然后枚举每个状态. 在每个状态里面任意枚 ...
- 关灯问题II 状压DP
关灯问题II 状压DP \(n\)个灯,\(m\)个按钮,每个按钮都会对每个灯有不同影响,问最少多少次使灯熄完. \(n\le 10,m\le 100\) 状压DP的好题,体现了状压的基本套路与二进制 ...
- HDU 5434 Peace small elephant 状压dp+矩阵快速幂
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5434 Peace small elephant Accepts: 38 Submissions: ...
- HDU 1074 Doing Homework(状压DP)
第一次写博客ORZ…… http://acm.split.hdu.edu.cn/showproblem.php?pid=1074 http://acm.hdu.edu.cn/showproblem.p ...
- HDU - 4284 Travel(floyd+状压dp)
Travel PP loves travel. Her dream is to travel around country A which consists of N cities and M roa ...
- HDU 4906 Our happy ending (状压DP)
HDU 4906 Our happy ending pid=4906" style="">题目链接 题意:给定n个数字,每一个数字能够是0-l,要选当中一些数字.然 ...
- HDU 1074 Doing Homework (状压dp)
题意:给你N(<=15)个作业,每个作业有最晚提交时间与需要做的时间,每次只能做一个作业,每个作业超出最晚提交时间一天扣一分 求出扣的最小分数,并输出做作业的顺序.如果有多个最小分数一样的话,则 ...
- HDU 4568 Hunter 最短路+状压DP
题意:给一个n*m的格子,格子中有一些数,如果是正整数则为到此格子的花费,如果为-1表示此格子不可到,现在给k个宝藏的地点(k<=13),求一个人从边界外一点进入整个棋盘,然后拿走所有能拿走的宝 ...
随机推荐
- 01.Python基础-5.函数
1 函数的介绍 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 内置函数 自定义函数 2 函数的定义和调用 2.1 函数的定义和调用 定义 def 函数名([参数]): 代码块 [ ...
- j2ee消息中间件
http://blog.csdn.net/apanious/article/details/51014396
- C#封装成DLL,并在C#中调用
一.C#封装成DLL 1.在VS中创建项目选择类库,命名 myDll 2.建立好项目后自动生成的代码如下: 代码修改如下,添加自己要封装的C#代码,注意修饰符必须为public using Syste ...
- Callable与Futrue创建线程
接口callable <V> 类型参数 V-call方法的结构类型 public interface Callable<V> 返回结果并且可能抛出的异常的任务.实现者定义一 ...
- Hibernate-原生SQL查询
HQL尽管容易使用,但是在一些复杂的数据操作上功能有限.特别是在实现复杂的报表统计与计算,以及多表连接查询上往往无能为力,这时可以使用SQL(Native SQL)实现HQL无法完成的任务. 1.使用 ...
- My SQL中show命令--MySQL中帮助查看
My SQL中show命令--MySQL中帮助查看 学习了:http://hahaxiao.techweb.com.cn/archives/477.html 在mysql命令界面内,输入help或者? ...
- 【Dubbo实战】基础学习篇(一)
Dubbo的简单介绍 是什么? Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000多个服务提供30多亿次訪问量支持.并被广泛应用于阿里巴巴集团的各成员网站. Dubbo是一个分布式服 ...
- hdu2767 Proving Equivalences,有向图强联通,Kosaraju算法
点击打开链接 有向图强联通,Kosaraju算法 缩点后分别入度和出度为0的点的个数 answer = max(a, b); scc_cnt = 1; answer = 0 #include<c ...
- 2015.04.21,外语,读书笔记-《Word Power Made Easy》 12 “如何奉承朋友” SESSION 32
TEASER PREVIEW 如何描述这些人: 很友好.容易相处的人: 不知疲倦的人: 简单.直率..aboveboard([ə'bʌv'bɔ:d] adv. 光明正大地, 率直地 adj. 光明正大 ...
- 读取excel模板填充数据 并合并相同文本单元格
try { string OutFileName = "北京市国控企业污染源废气在线比对监测数据审核表" + DateTime.Now.ToString(& ...