![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
cadongllas
这个作者很懒,什么都没留下…
展开
-
#343Div2-629C Famil Door and Brackets动态规划
oi退役之后正式开启acm之路,纠结之下感觉写题解还是挺重要的。。希望养成这个好习惯吧。。嗯这是大学的第一篇题解比赛的时候想到了是dp但是还是不太对,把问题想复杂了,其实不用管那么多情况,直接dp用乘法原理搞就没问题。具体做法:先预处理,f[i][j]表示长度是i的括号列,有j个未匹配的方案数这j个是左或者右括号其实并不重要,因为题目规定了任何时候左括号必须比右括号多,所以显然原创 2016-03-16 21:28:26 · 314 阅读 · 0 评论 -
#342Div2-625D Babaei and Birthday Cake线段树优化DP
首先要明白一个蛋糕在另一个之上当且仅当序号和体积都比原来的大然后一维显然可以用sort解决,另一维暴力是n^2显然过不了,考虑优化不妨按体积排序,然后记录对应的在原序列中的序号,然后扫一遍,每次处理完当前之后,便把这个体积插入线段树中,对应的节点就是在原序列中对应的节点,然后每次用logn做大查询,就是简单的线段树优化DP的问题。当然,比如树状数组等同样支持区间Max的也能做到#inc原创 2016-03-17 16:48:38 · 335 阅读 · 0 评论 -
BC#76 C_HDU5647 DZY Loves Connecting 树形DP
比赛的时候没想出来,现在发现还是一个经典的树形DP首先用size[i]表示节点i对答案的贡献同时为了推倒方便,用f[i]表示以i为根的子树的数目那么我们考虑当i的子节点j加入时,对答案的贡献首先,加入j时,会有f[i] * f[j]个新的子树加入,那么计算对答案的贡献之前的size[i]已经被计算过一次,加入j之后,对于答案的贡献是size[i] * f[j]此外,还需要统原创 2016-03-21 15:00:15 · 349 阅读 · 0 评论 -
CF645E-Intellectual Inquiry 贪心
用f[i]表示以i为结尾的子串的数目,同时记录字母i最后一次出现时的下标last[i]那么我们为了达到子串数目最大,考虑下一个字母如何填写。首先,如果附属字母i,那么此时收到影响的只有f[i],f数组中的其他数值并不受影响其次,当前加入新的字母的增量,就是所有f的和最重要的是,利用子串数目的递增性质,也就是f数组中,随着i的增加,f的数值同时也是增加的,这就意味着最早出现的字母必然原创 2016-03-21 19:54:05 · 448 阅读 · 0 评论 -
uva 11270 插头dp入门
白书的插头dp入门级题目,看了很久差不多懂了但是感觉自己写起来还是挺有难度的题意:求用1∗2木块将给出的n∗m大小的矩阵填满的方法总数用dp[i][j]表示第i块位置,并且该位置对应的行数的状态为j的时候的总情况数。对于每个阶段的每个状态有3种转移方式(1)不放(2)竖放(3)横放注意第一喂要用滚动数组优化内存#include #include原创 2016-09-03 10:38:06 · 292 阅读 · 0 评论 -
codeforces 696B 树形dp+概率
题意:访问一颗树,在节点上记录访问时间,每次对儿子节点的访问是随机的,问每个节点被访问时间的期望在每个子树中,可以发现每个节点cur ,dp[cur]=dp[fa]+f(cur);f这个函数可以发现是把fa当根节点,得到的每个子节点的期望值,这个值跟这棵子树的节点数有关,答案是(num[fa]-num[cur]-1)/2+1#include #include #incl原创 2016-09-03 11:33:39 · 272 阅读 · 0 评论 -
lightoj 1038 概率dp
题意:给出一个数字D我们可以选择1-D中可以被D整除的数字,然后用D出得到一个新的数字D‘;然后在找所有D’的因子,用D‘除,直到得到1;问除的次数的期望值设一个数的约数有m个,E[n] = E[a[1]]/m+E[a[2]]/m+...+E[a[m]]/m+1 (因为又除一次,所以+1)整理得:E[n]=(E[a[1]]+E[a[2]]+...+E[a[m原创 2016-09-03 13:33:31 · 206 阅读 · 0 评论 -
codeforces 189D AlgoRace
有m种车,给定每种车从城市i到城市j的时间话费cost[i][j],有 r 个询问,每次询问从 i 到 j ,最多换 k 次车类型的最小时间花费用cost[i][j][k]表示用第 i 种车,从j 走到 k的最小花费,读入花费矩阵之后,注意用floyd预处理,保证cost[i][j][k]是最优。然后用f[i][j][k] 表示换i 次车从 j 到k 的最优解,然后每次询问直接输出就行原创 2016-09-07 00:52:18 · 299 阅读 · 0 评论 -
codeforces 192C Dynasty Puzzles 字符串动态规划
给定n个字符串,问通过互相连接所能组成最长的字符串长度是多少,连接时必须满足前一个字符串的末尾和后一个字符串的首字符相同,而且最终的得到的字符串的首尾必须相同用f[i][j][k]表示前 i 个字符串首尾字符分别是j,k时的最优解,直接转移就可以。唯一值得注意的就是同样的状态,有可能随着转移,其最优解会发生改变。哦还要用滚动数组#include #include #incl原创 2016-09-07 11:02:06 · 230 阅读 · 0 评论