http://acm.hdu.edu.cn/showproblem.php?pid=6149


思路:

将图的相关点变成序列。

对于每个点,搜出匹配的山峰状态s。采用递推,i的s状态,搜出两个没用过的点,更新dp[i+1][s|1<<(p-1)|1<<(q-1)],类似01背包,看是否能在现在的基础上+1

#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
#include<cmath>
#include<map>
#include<set>
#include<cstdio>
#include<algorithm>
#define debug(a) cout<<#a<<"="<<a<<endl;
using namespace std;
const int maxn=35;
typedef int LL;
inline LL read(){LL x=0,f=1;char ch=getchar();   while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
return x*f;}
bool vis[maxn];
LL high[maxn],cnt=0;
LL low[maxn],tot=0;
LL ma[maxn][maxn];
LL dp[maxn][(1<<16)+1000];
int main(void){cin.tie(0);std::ios::sync_with_stdio(false);LL t;cin>>t;while(t--){memset(ma,0,sizeof(ma));memset(vis,0,sizeof(vis));memset(low,0,sizeof(low));memset(high,0,sizeof(high));memset(dp,0,sizeof(dp));cnt=tot=0;LL n,m,k;cin>>n>>m>>k;for(LL i=1;i<=m;i++){LL u,v;cin>>u>>v;ma[u][v]=ma[v][u]=1;}for(LL i=1;i<=k;i++){LL x;cin>>x;vis[x]=1;}for(LL i=1;i<=n;i++){if(vis[i]) high[++cnt]=i;if(!vis[i]) low[++tot]=i;}///预处理vector< pair<LL,LL> > trans[35];for(LL i=1;i<=tot;i++){for(LL p=1;p<=cnt;p++){if(!ma[low[i]][high[p]]) continue;for(LL q=p+1;q<=cnt;q++){if(!ma[low[i]][high[q]]) continue;trans[i].push_back({p,q});///dp[i][ (1<<(p-1) )| ( 1<<(q-1) )]=1;这样初始化后导致后面转移出错}}}for(LL i=1;i<=tot;i++){for(LL s=0;s<(1<<k);s++){dp[i+1][s]=max(dp[i+1][s],dp[i][s]);///当前这个点不匹配标记点for(LL j=0;j<trans[i].size();j++){LL p=trans[i][j].first;LL q=trans[i][j].second;if( s>>(p-1) &1 ) continue;if( s>>(q-1) &1 ) continue;dp[i+1][s| (1<<(p-1) )| (1<<(q-1) ) ]=max( dp[i][s]+1, dp[i+1][ s |  ( 1<<(p-1) ) | (1<<(q-1) ) ]  );}}}LL ans=0;for(LL j=0;j<(1<<k);j++){ans=max(ans,dp[tot+1][j]);}cout<<ans<<"\n";}return 0;
}

Valley Numer II(状压dp)相关推荐

  1. hdu 6149 Valley Numer II(状压+ 枚举)

    Valley Numer II Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  2. hdu 6149 Valley Numer II(01背包套状压dp)

    题目链接:hdu 6149 Valley Numer II 题意: 给你N个点,有k个为高点,其他为低点,现在这N个点有m条边,问你最多能组成多少个两个高点一个低点,低点和两个高点都有边相连这样的状态 ...

  3. 刷题周记(九)——#状压DP:最短Hamilton路径、小国王(互不侵犯)、玉米田(Corn Fields G)、愤怒的小鸟、吃奶酪、炮兵阵地、宝藏 #区间DP:清空字符串#DP:关灯问题II

    文章目录 --2020年12月20日(周日)------------------ 状压DP 一.最短Hamilton路径(模板题) 二.玉米田(P1879 [USACO06NOV]Corn Field ...

  4. BZOJ 4042 Luogu P4757 [CERC2014]Parades (树形DP、状压DP)

    题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=4042 (Luogu) https://www.luogu.org/prob ...

  5. [NOIP2016]愤怒的小鸟(状压DP)

    [NOIP2016]愤怒的小鸟(状压DP) 题目描述 输入输出格式 输入格式: 第一行包含一个正整数 T,表示游戏的关卡总数. 下面依次输入这 T个关卡的信息.每个关卡第一行包含两个非负整数 n,m, ...

  6. 最短Hamilton路径(哈密顿图,状压dp)

    题目: 给定一张 n 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径. Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每个点恰好一次. ...

  7. ZOJ 3755 - Mines (状压DP)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5178 题意: 大家都玩过扫雷吧. 给你n*m的扫雷数字.数字都在偶数列上. 也 ...

  8. P2622 关灯问题II(状压spfa)

    P2622 关灯问题II(状压&spfa) 每个状态可以压缩表示. 然后看成节点,开关就是状态转移的路径. 然后就是跑最短路spfa. 然后这题不能状压dp,因为状态转移的时候有后效性,每个状 ...

  9. 【AGC012E】 Camel and Oases ST表+状压dp

    题目大意:一排点,两点间有距离. 初始你有一个行走值$v$,如果相邻两点距离不超过$v$你可以自由在这两点行走.  当$v$大于$0$时,你可以选择某一时刻突然飞到任意点,这样做后$v$会减半(下取整 ...

最新文章

  1. python爬虫 智联招聘 工作地点
  2. leetcode 606. Construct String from Binary Tree | 606. 根据二叉树创建字符串
  3. springboot定时任务
  4. Spring Boot:快速启动MVC
  5. projective2d matlab
  6. Chrome历史版本和Chrome webDriver历史版本【多测师】
  7. mysql触发器 实例_mysql触发器的三个例子
  8. STM32学习笔记一:开发环境
  9. Johnnie Walker惊艳的广告
  10. Python 数据科学入门教程:Pandas
  11. win7在网上邻居上看不到别的电脑如何解决
  12. 使用 Spring Boot websocket 写简单网页聊天室
  13. android e.printStackTrace()异常处理
  14. C/C#实现RSA签名
  15. 如何关闭苹果手机自动扣费_iPhone自动扣费怎么取消?App Store、微信、支付宝关闭自动扣费教程...
  16. Pr:Lumetri范围
  17. JAVA 接口签名sign生成 工具类
  18. Windows环境下安装RabbitMQ(官方文档中文版)
  19. 计算机的内存条比硬盘,电脑硬盘比内存条还小,全是这个协议的功劳!
  20. 【黄啊码】MySQL入门—3、我用select *,老板直接赶我坐火车回家去,买的还是站票

热门文章

  1. matlab航电系统仿真,航空航天和国防
  2. 在一起计时器_没想到吧?快手竟然给厕所上安装了计时器,或许职场从此再无带薪拉屎...
  3. MySQL 临时目录
  4. unity小技巧收集总结--自用(三)
  5. [Western CTF 2018]shrine
  6. 永恒之蓝复现(win7/2008)
  7. 格式化电脑重装系统怎么操作
  8. ubuntu桌面被删除或home文件跑到桌面问题
  9. sql如何求连续打卡
  10. 极客”一词,来自于美国俚语“geek”的音译,一般理解为性格古怪的人