LianLianKan HDU - 4272 状压dp
题意:长度为n(n<=1000)的栈,栈顶元素可以与下面1~5个数中相同的元素消去,问最后能都完全消去。
题解:
1
2
3
4
5
6
7
8
9
10
11
2这个位置的最远可匹配位置能到11
为什么呢?
因为1这个位置可以匹配到6,那也就是说3、4、5、6这几个位置都可能被上面的匹配过(我写的序列肯定不够,将就一下)
那么剩下的序列就变成了
2
7
8
9
10
11
这样的话2的最远匹配距离就是11了
所以我们可以用1代表这个位置的数已经被抵消了,0代表没有被抵消
然后把这九个状态当作二进制形式,然后就被压缩成了一个int大小数字
dp[i][j]的值代表距离栈顶i-1的那个位置的数是否被抵消,是1代表被抵消了,是0代表没有抵消
dp[0][0]的设定只是为了下面程序的运行
具体看代码
1 #include<stdio.h>
2 #include<string.h>
3 #include<iostream>
4 #include<algorithm>
5 typedef long long ll;
6 using namespace std;
7 const int maxn=1005;
8 const int M=1<<9;
9 int v[maxn],dp[maxn][1<<9];
10 int main()
11 {
12 int n;
13 while(~scanf("%d",&n))
14 {
15 memset(dp,0,sizeof(dp));
16 for(int i=n;i>0;--i)
17 scanf("%d",&v[i]);
18 dp[0][0]=1;
19 for(int i=1;i<=n;++i)
20 {
21 for(int j=0;j<M;++j)
22 {
23 if(dp[i-1][j]) //因为题目说明要先抵消栈顶的元素,所以每一次寻找都要找到上一个元素被抵消的位置
24 {
25 if(j&1) //这个判断是用来判断这个位置的数字是不是被它上一个位置消掉了
26 {
27 dp[i][j>>1]=1; //因为j这个状态压缩的是它下面10个位置的状态,所以j>>1就完了
28 }
29 else
30 {
31 int t=0; //记录这个位置实际上下沉了几个位置
32 for(int k=1;k<=8;++k)
33 {
34 if(!(j&(1<<k)) && k-t<=5 && v[i]==v[i+k])
35 {
36 dp[i][(j>>1)|(1<<(k-1))]=1;
37 }
38 else if(j&(1<<k))
39 t++;
40 }
41 }
42 }
43 }
44 }
45 if(dp[n][0]==1)
46 printf("1\n");
47 else printf("0\n");
48 }
49 return 0;
50 }
LianLianKan HDU - 4272 状压dp的更多相关文章
- HDU 4778 状压DP
一看就是状压,由于是类似博弈的游戏.游戏里的两人都是绝对聪明,那么先手的选择是能够确定最终局面的. 实际上是枚举最终局面情况,0代表是被Bob拿走的,1为Alice拿走的,当时Alice拿走且满足变换 ...
- HDU 3001 状压DP
有道状压题用了搜索被队友骂还能不能好好训练了,, hdu 3001 经典的状压dp 大概题意..有n个城市 m个道路 成了一个有向图.n<=10: 然后这个人想去旅行.有个超人开始可以把他扔到 ...
- hdu 2809(状压dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2809 思路:简单的状压dp,看代码会更明白. #include<iostream> #in ...
- hdu 2167(状压dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2167 思路:经典的状压dp题,前后,上下,对角8个位置不能取,状态压缩枚举即可所有情况,递推关系是为d ...
- Engineer Assignment HDU - 6006 状压dp
http://acm.split.hdu.edu.cn/showproblem.php?pid=6006 比赛的时候写了一个暴力,存暴力,过了,还46ms 那个暴力的思路是,预处理can[i][j]表 ...
- hdu 3254 (状压DP) Corn Fields
poj 3254 n乘m的矩阵,1表示这块区域可以放牛,0,表示不能,而且不能在相邻的(包括上下相邻)两个区域放牛,问有多少种放牛的方法,全部不放也是一种方法. 对于每块可以放牛的区域,有放或者不放两 ...
- HDU 5823 (状压dp)
Problem color II 题目大意 定义一个无向图的价值为给每个节点染色使得每条边连接的两个节点颜色不同的最少颜色数. 对于给定的一张由n个点组成的无向图,求该图的2^n-1张非空子图的价值. ...
- hdu 4739 状压DP
这里有状态压缩DP的好博文 题目:题目比较神,自己看题目吧 分析: 大概有两种思路: 1.dfs,判断正方形的话可以通过枚举对角线,大概每次减少4个三角形,加上一些小剪枝的话可以过. 2.状压DP,先 ...
- Travel(HDU 4284状压dp)
题意:给n个城市m条路的网图,pp在城市1有一定的钱,想游览这n个城市(包括1),到达一个城市要一定的花费,可以在城市工作赚钱,但前提有工作证(得到有一定的花费),没工作证不能在该城市工作,但可以走, ...
随机推荐
- Linux tar压缩和解压
经常会忘记 tar 压缩和解压命令的使用,故记下来. 1. 打包压缩 tar -zcvf pack.tar.gz pack/ #打包压缩为一个.gz格式的压缩包 tar -jcvf pack.tar. ...
- 技术基础 | Cassandra RBAC助你打击“虚拟海盗”,让他们对数据“战利品”望而不得
现如今,我们称虚拟世界里的海盗们为"黑客",他们所追寻的战利品就是在你数据库某处的数据. 而我们能够保证你的数据安全的工具之一,就是"Cassandra基于角色的访问 ...
- 记一次centos7重启后docker无法启动的问题
问题描述 在重新了centos7系统后,docker突然就启动不了了,查看报错信息 [root@localhost ~]# systemctl status docker.service ● dock ...
- SP338 ROADS
题目描述 城市中有R条有向马路,n个马路连接点,通过每条马路都要花去一定费用.你现在在编号为1的连接点 ,手里有k元钱,要去n号连接点的最短路径的长度是多少?途中经过道路的花费不能超过k.注意:两个 ...
- Ubuntu安装记录
好吧,这成功地让我想起了那些边肯红薯边黑苹果的早晨······ 本人纯属Windows用腻,后期请大佬多多指教 前面因为没U盘而碰壁的内容在此不说,接下来因为太兴奋,关于安装U盘制作没记录什么.最终, ...
- 转 Jmeter测试实践:文件上传接口
Jmeter测试实践:文件上传接口 1.打开jmeter4.0,新建测试计划,添加线程组.根据实际情况配置线程属性. 2.添加HTTP请求. Basic部分修改如下: Advanced部分我做任何 ...
- 前端面试之CSS常用的选择器!
前端面试之CSS常用的选择器! 标签选择器 <style> /* <!-- 标签选择器 :写上标签名 -->*/ p { color: green; } div { color ...
- XShell的手动直连,避免配置ssh免密的一些问题
- selenium八大元素定位方法
1.ID定位 可以根据元素的id来定位属性,id是当前整个HTML页面中唯一的,所以可以通过id属性来唯一定位一个元素,是首选的元素定位方式.(动态ID不做考虑) # 导入webdriver和By f ...
- OPTIONS的预请求(Preflighted Request)
OPTIONS的预请求(Preflighted Request) Ajax 请求中出现OPTIONS(Request Method: OPTIONS)_qiao-CSDN博客 https://blog ...