
动态规划
Absoler
这个作者很懒,什么都没留下…
展开
-
codeforces/1312E(区间dp)
题目这道题不管从内容还是数据范围看起来都像是区间dp,可一时想不出来怎么构造出一个满足无后效性的区间状态,看了一眼题解才顿悟。分两步走,第一步我们求出所有的dp[l][r],表示[l,r]区间可以最终转化为的一个数,如果无法转化则为零,这一步的巧妙就在于包含了足够的信息来“总结”这个区间。第二步我们用前缀dp,设dp2[i]表示前i个元素最少合并为几个点,容易求出。#include&...原创 2020-03-21 22:26:25 · 474 阅读 · 0 评论 -
区间DP
HDU4283题目中的小黑屋就是一个栈,因此在处理区间时要考虑栈的特点,即“区间嵌套性”。我们令dp[i][j]代表区间[i , j]的最小代价,注意这里是单看这一个区间,即a[i]为首元素。接下来讨论a[i]的出现次序,设第k个出现,则[i+1, i+k-1]元素必将在第1~k-1个次序出现,因为a[i]入栈后在栈底,第k个出现则意味着之前k-1个元素即使入栈,也早已出栈,可视为同结构的子状...原创 2019-10-28 00:49:04 · 126 阅读 · 0 评论 -
数位DP的一点心得
众所周知,DP算法用于解决拥有最优子结构或者可记忆化搜索的问题。数位DP一般属于后者。对于HDU2089这样的经典问题,我们可以看到,如果从0到1000000一个数字一个数字地去判断是否合法,会造成很多计算的浪费,譬如0~999这个区间有多少合法的值,其实是可以复用的。我们因此引入记忆化搜索来解决这个问题。dp[pos][state]; //int dp[6][2];表示在0~...原创 2019-10-12 20:40:34 · 140 阅读 · 0 评论 -
poj3140——树形搜索
题目大意:每个节点有一个权值,可从任一边将树一分为二,求两边权和之差的最小值附:题目链接建树过程和上一道题一样,同时求出每个节点管辖子树的规模size,然后在dfs函数中判断:把当前点及其以下从树上割开时,两者之差是否更小,ans初始值设为所有点权和即可。出现问题:1.runtime error,vector<int>设为全局变量然后忘记了每次都要加上clear()...原创 2018-09-19 00:34:15 · 246 阅读 · 0 评论 -
树形dp入门——poj2378
题目大意:给出一个大小为n的树,意欲破坏其中一个节点使得剩余残骸大小均不超过n/2,给出所有可行的节点编号(1~n)思路很直接,拆除一个节点后,剩余部分为其若干儿子的子树以及该节点上层所连其余部分(n-size[i]),只要这些连接块大小都不超过n/2,该节点就满足条件。因而我们可以先求出每个节点所管辖的那棵树的大小,这里用到了dfs,也可以勉强算作dp:自下而上地为每个节点求出其子树规模(该...原创 2018-09-14 13:25:41 · 203 阅读 · 0 评论 -
一些数学知识补充
1 分数取模需要对一个分数pq\frac{p}{q}qp取模时,若gcd(q,m)=1gcd(q,m)=1gcd(q,m)=1则p∗q−1≡p×qm−2(modm)p*q^{-1} \equiv p\times q^{m-2}\pmod mp∗q−1≡p×qm−2(modm)第二场A题,答案需令 1n−1\frac{1}{n-1}n−11 对 109+710^9+7109+7 取模...原创 2019-07-20 23:23:09 · 286 阅读 · 0 评论