链接:https://leetcode.com/problems/house-robber/
这道理可以看做是状态压缩,每两个数字看做是一行,状态有3个,故需要F[N][3]的数组,F[i][j]就表示第i行状态j时rob的money。
具体状态压缩可以看我这两篇blog: 算法练习系列—hiho1048 状态压缩一(铺地砖) 算法练习系列—hiho1044 状态压缩二(捡垃圾)
#inc...
分类:
其他好文 时间:
2015-04-01 20:03:09
阅读次数:
166
经典的状态压缩DP题了。做了前面两题,就不感觉难了。#include #include #include #include using namespace std;int stack[1>1,r2=st>>2; if(l1&i){flag=false; break;} if(l2&i){...
分类:
其他好文 时间:
2015-03-31 21:51:49
阅读次数:
152
原题地址按照提示里的递推公式,不知道改怎么写,因为如何枚举状态s不是很明显索性修改了一下递推公式,这样带来了一些冗余计算,不过还好没有超时位运算的状态压缩太操蛋了,很容易出错。。。又是数组没开够导致诡异现象(明明某个值是1,莫名其妙就变成0了),害我debug一整天!fuck代码: 1 #inclu...
分类:
其他好文 时间:
2015-03-31 17:34:29
阅读次数:
151
简单的状态压缩。#include #include #include #include using namespace std;const int Status=1>=1;// coutm-1){ // coutinfer) continue; if((stack[p]&G[i+1])...
分类:
其他好文 时间:
2015-03-31 12:19:52
阅读次数:
133
题意:给你4个数0,1,2,3,用这四个数字组成n位的数,其中 0必须 在1前面, 2必须在三前面,问你n位数没有前导0的有多少个。解题思路:1) 状态压缩DP,dp[i][j] 表示 到了第i位 出来了那几个数,分别的状态为多少。 j(1-15),然后求出各自的DP系数就行了。解题代码: 1 /....
分类:
其他好文 时间:
2015-03-30 21:04:01
阅读次数:
242
比赛的时候刷出来的第一个状态DP。(期间有点没有把握是状态DP呢。)题意:题意还是简单的。K行的方格。之后输入L1~LK 代表每一行方格数。在这些往左紧挨的方格子里填上1~N的数字。其中右边格子会大于等于左边的格子,下边的格子会大于上边的格子。
分类:
其他好文 时间:
2015-03-30 00:57:34
阅读次数:
270
原题地址第一次做树的动归题,如果没有提示的话还是挺难的提示里的递推式隐含了状态压缩(m从大往小遍历),不是那么好想,只能说不能再屌了。代码: 1 #include 2 #include 3 4 using namespace std; 5 6 #define SIZE 128 7 8 in...
分类:
其他好文 时间:
2015-03-29 19:25:05
阅读次数:
159
//开一个四维数组记录墙和门的情况
//开一个三维数组标记在该位置时有哪些钥匙
//钥匙的记录用状态压缩
//注意在同一个位置可以有多把钥匙,在这卡了一个晚上。。。。。。。
#include
#include
#include
#include
using namespace std;
const int maxn = 60 ;
int vis[maxn][maxn][1
i...
分类:
其他好文 时间:
2015-03-28 08:57:48
阅读次数:
122
//开一个三维标记数组,标记Ignatius有没有以拿到钥匙的状态到达该位置
//由于钥匙的个数最多十个,所以可以用状态压缩来做
//用1和0表示有没有第i种钥匙,这样对于这个人拿到的钥匙状态就可以用二进制数表示
//用bfs找到最小值
#include
#include
#include
#include
using namespace std ;
const int maxn...
分类:
其他好文 时间:
2015-03-27 22:25:04
阅读次数:
137
AC自动机+状态压缩DP注意:相同的串可能出现多次,如果匹配成功则将各次权值加和。#include #include #include using namespace std;#define D(x) const int MAX_N = 15;const int MAX_LEN = 105;cons...
分类:
其他好文 时间:
2015-03-27 22:09:33
阅读次数:
142