题目梗概

给定一个无向图,图中的点存在高低。
定义山谷为:一个低点连接两个相邻的高点。
求不相交的山谷的最大个数。

解题思路

一看这个高点个数<=15高点个数就马上想到压位DP。
i表示前i个点,j表示选择高点的状态,直接转移就可以了。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=35,maxm=32805;
int f[maxn][maxm],a[maxn],t,n,m,K,num,ans;
bool vis[maxn],lnk[maxn][maxn];
int main(){freopen("exam.in","r",stdin);freopen("exam.out","w",stdout);scanf("%d",&t);while(t--){memset(f,0,sizeof(f));memset(lnk,0,sizeof(lnk));memset(vis,0,sizeof(vis));scanf("%d%d%d",&n,&m,&K);for (int i=1;i<=m;i++){int x,y;scanf("%d%d",&x,&y);lnk[x][y]=lnk[y][x]=1;}num=(1<<K);ans=0;for (int i=0;i<K;i++) scanf("%d",&a[i]),vis[a[i]]=1;for (int i=1;i<=n;i++){for (int j=0;j<num;j++) f[i][j]=f[i-1][j];if (vis[i]) continue;for (int j=0;j<num;j++)for (int k=0;k<K;k++) if (((1<<k)&j)==0&&lnk[a[k]][i])for (int t=0;t<k;t++) if (((1<<t)&j)==0&&lnk[a[t]][i])f[i][(j|(1<<k))|(1<<t)]=max(f[i][(j|(1<<k))|(1<<t)],f[i-1][j]+1);}for (int j=0;j<num;j++) ans=max(ans,f[n][j]);printf("%d\n",ans);}return 0;
}

[压位DP]Hdu 6149——Valley Numer II相关推荐

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

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

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

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

  3. 2016 UESTC Training for Dynamic Programming F - 柱爷与三叉戟不得不说的故事 压位dp

    F - 柱爷与三叉戟不得不说的故事 Time Limit: 500/500MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) ...

  4. HDU 6148 Valley Numer (数位dp)

    题意: 求区间内满足非波峰数的个数. 其中波峰 是  先上升 在 下降,  平滑不会影响前面的状态. 思路: 很明显数位dp 令dp[i][j][k] 表示  枚举到数的第i 位, 前一个数字是j   ...

  5. HDU 6148 Valley Numer(数位DP)

    Valley Numer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot ...

  6. HDU 6148 - Valley Numer(数位DP)

    Valley Numer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot ...

  7. Valley Numer II(状压dp)

    http://acm.hdu.edu.cn/showproblem.php?pid=6149 思路: 将图的相关点变成序列. 对于每个点,搜出匹配的山峰状态s.采用递推,i的s状态,搜出两个没用过的点 ...

  8. HDU 6148 Valley Numer [数位dp]

    题意:求出小于等于n的,满足三种情况的任意一种的数的个数: ①每个位数字,递增,如122 ②每个位数字,递减,如211 ③每个位数字,先递减,在递增,如121 题解:数位dp,记录三维,pos(枚举的 ...

  9. HDU 6148 Valley Numer (数位DP)题解

    思路: 只要把status那里写清楚就没什么难度T^T,当然还要考虑前导零! 代码: #include<cstdio> #include<cstring> #include&l ...

最新文章

  1. C# 转换人民币大小金额(WinForm、Asp.Net)
  2. 分屏显示_王者做图显示器,戴尔(DELL)U2417全面介绍
  3. 1.大数据处理架构Hadoop
  4. 一图速览 | DTCC 2021大会,阿里云数据库技术大咖都聊了些什么?
  5. 有关Vs2008 由代码转化到设计器时死掉问题
  6. SAP CRM fiori application delete if only one note header
  7. php与其它语言组合开发,PHP相对于其它语言有哪些魅力?
  8. Swing中的并发-使用SwingWorker线程模式
  9. PHP危险函数被禁止怎么绕过,PHP危险函数(disable_functions)设置
  10. 使用当前更改创建Git分支
  11. 在使用刚体时的几个注意点和参数
  12. flex invalidation 机制
  13. 通过爬虫获取免费IP代理,搭建自己的IP池(http)
  14. 电磁场知识回顾——求解方法汇总
  15. C# vb .net实现玻璃桌子效果滤镜
  16. 将一个字符串转换为对应的整数
  17. 主引导扇区及主引导记录MBR的详细说明
  18. JavaBeans 教程
  19. 交叉编译详解 - 概念篇
  20. 小提琴机器人拉法_好和弦 | [Ep.195]小提琴跟中提琴到底有多少种拉法?

热门文章

  1. 30 个 Python3 的最佳实操,小贴士和窍门(附课程)
  2. 快速配置Tomcat,解决Tomcat卡住不动
  3. ZigBee传感数据采集实验
  4. 2022年6月的顶级黑客
  5. C++中出现[Error] ‘rand‘ was not declared in this scop报错
  6. 有度即时通系统安全技术原理
  7. 如何在计算机桌面恢复我的电脑,桌面上我的电脑图标不见了怎么恢复?桌面计算机图标不见了的3个解决方法...
  8. 【spark使用】4. Dataset转换算子使用
  9. 世界上没有技术驱动型公司!
  10. android 平板桌面,RUI平板桌面