随笔分类 -  动规

摘要:第一次做期望dp 并不知道每个阶段的期望之和就是整个的期望之和 所以一直卡在这 期望=代价*概率 然后注意只有申请了才算期望,否则按原来的。 这道题和前几个课程,申请的限制,当前选或不选,有关 这样很容易写出dp的状态 其实你如果打80分的暴力,会发现把那个暴力记忆化一下 就变成dp,就可以拿满分了 阅读全文
posted @ 2018-11-08 11:38 Sugewud 阅读(227) 评论(0) 推荐(0)
摘要:题集见大佬博客 不要62 入门题,检验刚才自己有没有看懂 注意一些细节。 的确挺套路的 P2657 [SCOI2009]windy数 继续套路 P2602 [ZJOI2010]数字计数 第一次这么轻松做出紫题 一样套模板,爽啊 P3413 SAC#1 - 萌数 注意数字很大,要用字符串存储 然后就没 阅读全文
posted @ 2018-11-07 11:31 Sugewud 阅读(474) 评论(0) 推荐(1)
摘要:这道题很水 但我没做出来……………………………… 我写的时候状态设计错了,设计dp[l][m][r]为从l到r以m为根的值 这样写遍历状态就是n^3的,会TLE。 而且写路径的时候是用结构体写的,这样会错,应该用root[l][r]表示从l到r的根 对于l到r,枚举根在哪就好了 总结 (1)状态设计 阅读全文
posted @ 2018-11-06 21:30 Sugewud 阅读(287) 评论(0) 推荐(0)
摘要:NOIP2018提高组金牌训练营——动态规划专题 https://www.51nod.com/Live/LiveDescription.html#!#liveId=19 多重背包 二进制优化转化成01背包就好了 1503 猪和回文 http://www.51nod.com/Challenge/Pro 阅读全文
posted @ 2018-11-03 10:51 Sugewud 阅读(606) 评论(0) 推荐(0)
摘要:题目链接 https://www.luogu.org/problemnew/solution/P3959 这道题学到很多很多东西 还是很多收获的,虽然花了非常长的时间 首先直接写prim可以得45分,还是很多的 貌似不需要long long 然后直接打搜索竟然可以拿到70分!! 然后接下来要AC这道 阅读全文
posted @ 2018-11-01 11:22 Sugewud 阅读(173) 评论(0) 推荐(0)
摘要:之前一直是用二分 但是因为比较难理解,写的时候也容易忘记怎么写。 今天比赛讲评的时候讲了一种用树状数组求LIS的方法 (1)好理解,自然也好写(但代码量比二分的大) (2)扩展性强。这个解法顺带求出以i为结尾的LIS,而很多题要用到这个数组来做 而二分的做法求得是当前长度下的最小值,不容易拓展。 具 阅读全文
posted @ 2018-10-20 22:08 Sugewud 阅读(1484) 评论(0) 推荐(0)
摘要:还有这种操作??????直接用pre到now转移的方式构造一个矩阵就好了。二进制长度为m,就构造一个长度为1 #include#include#define REP(i, a, b) for(int i = (a); i 4) return; if(l == 4) ... 阅读全文
posted @ 2018-09-24 17:03 Sugewud 阅读(174) 评论(0) 推荐(0)
摘要:本来直接一波状压dpAC的#include#include#include#define REP(i, a, b) for(int i = (a); i m) return; if(l == m) { path[p][0] = pre; path[p++][1]... 阅读全文
posted @ 2018-09-24 16:44 Sugewud 阅读(176) 评论(0) 推荐(0)
摘要:这道题的解析这个博客写得很好https://blog.csdn.net/shiwei408/article/details/8821853大致意思就是我们可以只处理两行之间的关系,然后通过这两个关系推出所有行(有点像矩阵快速幂的思想)几个要注意的地方(1)第0行为全1... 阅读全文
posted @ 2018-09-24 16:12 Sugewud 阅读(180) 评论(0) 推荐(0)
摘要:上来直接一波敲键盘,直接套Tsp问题的代码然后WA发现貌似这道题没有连续性。Tsp问题是一条路径,一个点到另一个点,多了一个限制,所以就需要加多一维而这道题没有限制,也就是说那一维不需要加,我加了还WA然后要搞清楚状态,在纸上可以写,写清楚了再敲代码这道题一开始都是存... 阅读全文
posted @ 2018-09-24 14:54 Sugewud 阅读(142) 评论(0) 推荐(0)
摘要:这道题千辛万苦啊!这道题要涉及到当前点和前面两个点,那就设dp[state][i][j]为当前状态为state,当前点为i,前一个点为j这个状态表示和之前做炮兵那题很像,就是涉及到三个点时,就多设一维表示前一个点(炮兵那题把点换成行)这道题有很多细节需要注意(1)计算... 阅读全文
posted @ 2018-09-24 12:24 Sugewud 阅读(128) 评论(0) 推荐(0)
摘要:(1)这道题最多可以走两次,所以有0, 1, 2三种状态,所以我们要用三进制如果要用三进制,就要自己初始化两个数组, 一个是3的n次方,一个是三进制数的第几位的数字是什么void init(){ three[0] = 1; REP(i, 1, 11) three[i... 阅读全文
posted @ 2018-09-24 10:44 Sugewud 阅读(140) 评论(0) 推荐(0)
摘要:这道题就是Tsp问题,稍微加了些改变 注意以下问题 (1)每个点可以经过多次,这里就可以用弗洛伊德初始化最短距离 (2)在循环中集合可以用S表示更清晰一些 (3)第一维为状态,第二维为在哪个点,不要写混。 (4)在dp过程中0这个点是不用的,只用到1到n这个点 而实际上dp过程中用的是0到n-1,所 阅读全文
posted @ 2018-09-23 23:26 Sugewud 阅读(147) 评论(0) 推荐(0)
摘要:这题和poj 3254很像,但是更复杂了一些都属于棋盘里放东西,然后又各种各样的限制,然后求方案或者最大值(1)上一道题距离要大于1,这道题是大于2。所以判断的时候变成!(x & (x #include#include#define REP(i, a, b) for(... 阅读全文
posted @ 2018-09-23 22:38 Sugewud 阅读(145) 评论(0) 推荐(0)
摘要:状压dp入门题因为当前行的状态只和上一行有关所以可以一行一行来做因为m #include#include#define REP(i, a, b) for(int i = (a); i state;inline bool judge(int x) { return !... 阅读全文
posted @ 2018-09-23 17:20 Sugewud 阅读(116) 评论(0) 推荐(0)
摘要:看到这道题n只有16,就可以想到状压dp每个人只有经过或者没经过,那就用1表示经过,0表示没经过但是不是当前在谁那里,所以再加一维来记录所以f[state][i]表示在物品在i,当前的状态是state情况下的最小总代价有几个细节要注意 (1)刷表法。要提前初始化为-1... 阅读全文
posted @ 2018-09-23 13:58 Sugewud 阅读(147) 评论(0) 推荐(0)
摘要:这道题主要是状态很难想到首先可以看出每行每列不能超过2个棋子也就是说有0, 1, 2三种状态所以可以一行一行来处理那就用表示前i行,有列放了一个棋子,有列放了2个棋子的方案数放了0个棋子的列数是那么这个时候状态转移方程就非常好写了。对于当前这一行可以不放,放一个,放两... 阅读全文
posted @ 2018-09-15 12:21 Sugewud 阅读(142) 评论(0) 推荐(0)
摘要:设为第i秒获得的最大值表示从当前世界是j,从pos走k步到当前点i的最大价值注意这里的sum可以利用前面的值逐步累加。我开始做的时候没有想到这一点单独求,然后就超时了。同时要注意循环的循序问题。#include#include#include#include#defi... 阅读全文
posted @ 2018-09-15 11:13 Sugewud 阅读(131) 评论(0) 推荐(0)
摘要:首先吃饭时间长的排在前面更优,所以先排个序然后问题就是怎么分配这一波人的问题刻画状态有人和时间,然后分两队所以用表示前i个人,第一队用j时间,第二队用k时间的最小吃饭时间那么因为这么开数组会炸,所以我们要降一维。前i个人的等待总时间是固定的,所以第二队的时间可以推出来... 阅读全文
posted @ 2018-09-14 22:39 Sugewud 阅读(135) 评论(0) 推荐(0)
摘要:和玉蟾宫很像,条件改成不相等就行了。悬线法题目 洛谷 P1169 p4147 p2701 p1387 #include#include#define REP(i, a, b) for(int i = (a); i = 1; j--) if(a[i][j] !... 阅读全文
posted @ 2018-09-14 19:40 Sugewud 阅读(61) 评论(0) 推荐(0)