[压位DP]Hdu 6149——Valley Numer II
题目梗概
给定一个无向图,图中的点存在高低。
定义山谷为:一个低点连接两个相邻的高点。
求不相交的山谷的最大个数。
解题思路
一看这个高点个数<=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相关推荐
- hdu 6149 Valley Numer II(01背包套状压dp)
题目链接:hdu 6149 Valley Numer II 题意: 给你N个点,有k个为高点,其他为低点,现在这N个点有m条边,问你最多能组成多少个两个高点一个低点,低点和两个高点都有边相连这样的状态 ...
- hdu 6149 Valley Numer II(状压+ 枚举)
Valley Numer II Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 2016 UESTC Training for Dynamic Programming F - 柱爷与三叉戟不得不说的故事 压位dp
F - 柱爷与三叉戟不得不说的故事 Time Limit: 500/500MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) ...
- HDU 6148 Valley Numer (数位dp)
题意: 求区间内满足非波峰数的个数. 其中波峰 是 先上升 在 下降, 平滑不会影响前面的状态. 思路: 很明显数位dp 令dp[i][j][k] 表示 枚举到数的第i 位, 前一个数字是j ...
- HDU 6148 Valley Numer(数位DP)
Valley Numer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- HDU 6148 - Valley Numer(数位DP)
Valley Numer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- Valley Numer II(状压dp)
http://acm.hdu.edu.cn/showproblem.php?pid=6149 思路: 将图的相关点变成序列. 对于每个点,搜出匹配的山峰状态s.采用递推,i的s状态,搜出两个没用过的点 ...
- HDU 6148 Valley Numer [数位dp]
题意:求出小于等于n的,满足三种情况的任意一种的数的个数: ①每个位数字,递增,如122 ②每个位数字,递减,如211 ③每个位数字,先递减,在递增,如121 题解:数位dp,记录三维,pos(枚举的 ...
- HDU 6148 Valley Numer (数位DP)题解
思路: 只要把status那里写清楚就没什么难度T^T,当然还要考虑前导零! 代码: #include<cstdio> #include<cstring> #include&l ...
最新文章
- C# 转换人民币大小金额(WinForm、Asp.Net)
- 分屏显示_王者做图显示器,戴尔(DELL)U2417全面介绍
- 1.大数据处理架构Hadoop
- 一图速览 | DTCC 2021大会,阿里云数据库技术大咖都聊了些什么?
- 有关Vs2008 由代码转化到设计器时死掉问题
- SAP CRM fiori application delete if only one note header
- php与其它语言组合开发,PHP相对于其它语言有哪些魅力?
- Swing中的并发-使用SwingWorker线程模式
- PHP危险函数被禁止怎么绕过,PHP危险函数(disable_functions)设置
- 使用当前更改创建Git分支
- 在使用刚体时的几个注意点和参数
- flex invalidation 机制
- 通过爬虫获取免费IP代理,搭建自己的IP池(http)
- 电磁场知识回顾——求解方法汇总
- C# vb .net实现玻璃桌子效果滤镜
- 将一个字符串转换为对应的整数
- 主引导扇区及主引导记录MBR的详细说明
- JavaBeans 教程
- 交叉编译详解 - 概念篇
- 小提琴机器人拉法_好和弦 | [Ep.195]小提琴跟中提琴到底有多少种拉法?
热门文章
- 30 个 Python3 的最佳实操,小贴士和窍门(附课程)
- 快速配置Tomcat,解决Tomcat卡住不动
- ZigBee传感数据采集实验
- 2022年6月的顶级黑客
- C++中出现[Error] ‘rand‘ was not declared in this scop报错
- 有度即时通系统安全技术原理
- 如何在计算机桌面恢复我的电脑,桌面上我的电脑图标不见了怎么恢复?桌面计算机图标不见了的3个解决方法...
- 【spark使用】4. Dataset转换算子使用
- 世界上没有技术驱动型公司!
- android 平板桌面,RUI平板桌面