动态规划
通信男神杨丽斌
我们不能,不能失去信仰
展开
-
vivo2019秋招笔试题:运矿石(01背包)
题目大意:给定n(n<=100)个数,每个数不超过100,你需要把n个数分成两堆,两堆个数相差最多为1,且两堆的权值和之差最小,问最小的差是多少?思路:01背包,因为每个数不超过100,总和不超过10000,所以我们可以判断每个和空间是否可以到达。dp[j][k]表示选择了j个元素,此时和为k是否可行,这里滚动了一维:本来是前i个元素中选择j个,和为k是否可行,内存不够所以进...原创 2020-02-18 21:41:16 · 1307 阅读 · 0 评论 -
Codeforce 1288 C.Two Arrays (思维+dp)
题目链接:https://codeforces.com/contest/1288/problem/C题目大意:给定两个整数n和m,现在你需要构造如下两个数组A,B:两个数组的长度均为m 两个数组的元素均在[1,n]之间,允许重复 对于任意位置i,有Ai<=Bi A数组元素是非递减排列的,也就是Ai<=Ai+1 B数组元素是非递增排列的,也就是Bi<=Bi+1...原创 2020-01-16 17:18:48 · 616 阅读 · 0 评论 -
牛客练习赛56C.小魂和他的数列(dp+树状数组)
题目大意:给定一个n元素的数列,第i个数为Ai,求这个数列中一共有多少个长度为K的子序列是严格递增的。思路:线段树写多了,看见n这么大,感觉不能开k颗线段树呀,那怎么做呀?都忘了还有树状数组了23333dp(i,j)表示以i元素为结尾的,长度为j的严格递增子序列的个数。那么递推式如下:所以就变成如何快速计算比i小且a[k]比a[i]小的dp(k,j-1)的和了。发现...原创 2020-01-01 00:06:35 · 261 阅读 · 0 评论 -
[HAOI2015]树上染色(树上背包)
题目描述有一棵点数为 N 的树,树边有边权。给你一个在 0~ N 之内的正整数 K ,你要在这棵树中选择 K个点,将其染成黑色,并将其他 的N-K个点染成白色 。 将所有点染色后,你会获得黑点两两之间的距离加上白点两两之间的距离的和的受益。问受益最大值是多少。输入格式第一行包含两个整数 N, K 。接下来 N-1 行每行三个正整数 fr, to, dis , 表示该树中存在一条长度为 ...原创 2019-12-11 21:30:55 · 274 阅读 · 0 评论 -
牛牛的回文串(区间dp)
题目大意牛牛喜欢回文串,牛妹给了牛牛一个字符串S,牛牛想把S变成回文串 牛牛可以做如下三种操作 1:在任意位置增加一个字符 2:删除一个字符 3:改变一个字符每种操作都有限定的字符,比如,只能删除'a',增加'b',把'c'变成'd'等等 每种操作都有相应的代价 用M条语句来描述能进行的操作 add c x 表示增加c字符需要x的代价 erase c x表示删除c字符需要x的代价 chan...原创 2019-12-03 21:02:01 · 448 阅读 · 0 评论 -
UVa11367.Full Tank?(Dijkstra+DP)
题目链接:https://vjudge.net/problem/UVA-11367题目大意:给出n个地点 和 每个地点的油价 ,有 m 条边 , 并给出每条边长度 。1单位汽油可以走1千米 , 油箱的容量为 c , 在初始点 s 时 , 油箱中的油为 0 , 求s 到 t 的最小花费 。思路:因为并不能确定这个点是否需要加油,这不是一个单调性的问题,所以需要dp一下,用分层图的思...原创 2019-11-22 16:32:29 · 187 阅读 · 0 评论 -
牛客专题——删括号(动态规划)
链接:https://ac.nowcoder.com/acm/problem/21303来源:牛客网时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 524288K,其他语言1048576K64bit IO Format: %lld题目描述给你一个合法的括号序列s1,每次你可以删除一个"()"你可以删除0个或者多个"()"求能否删成另一个括号序列s2输入描...原创 2019-07-11 18:49:24 · 564 阅读 · 0 评论 -
牛客专题——codeforces(动态规划,类背包)
链接:https://ac.nowcoder.com/acm/problem/21314来源:牛客网时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 524288K,其他语言1048576K64bit IO Format: %lld题目描述牛牛正在打一场CF比赛时间为T分钟,有N道题,可以在比赛时间内的任意时间提交代码第i道题的分数为maxPoints[i],...原创 2019-07-11 18:54:05 · 692 阅读 · 3 评论 -
codeforces 9D How many trees(动态规划)
题目链接:https://vjudge.net/problem/CodeForces-9D题目大意给你一个n,h,问你n个节点能够构成深度不小于h的二叉搜索树的个数是多少个?思路:很明显的树型dp,dp[n][h]表示n个节点深度小于等于h,此时答案为 dp[n][n] - dp[n][h-1] , 状态转移条件是两个儿子深度都小于等于h-1 , 即dp[i][j]=sum{d...原创 2019-08-03 20:54:46 · 212 阅读 · 0 评论 -
牛客多校第四场K——number(动态规划)
链接:https://ac.nowcoder.com/acm/contest/884/K来源:牛客网number时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 524288K,其他语言1048576K64bit IO Format: %lld题目描述300iq loves numbers who are multiple of 300.One day h...原创 2019-08-02 10:59:54 · 223 阅读 · 0 评论 -
组队赛3.阳明学长的树(树型dp)
题目链接:https://codeforces.com/problemset/problem/461/B题目大意:给你一个树,上面有黑点有白点,现在你可以删除k条边,0<=k<n,问你有多少种方案能够使得所有删除边后的连通块中只有一个黑点。思路:比较经典的树型dp,dp(u,0)表示以u为根节点的连通块,没有黑点的方案数,dp(u,1)表示以u为根节点的连通块,有一个黑...原创 2019-08-22 11:28:24 · 143 阅读 · 0 评论 -
牛客练习赛52C.烹饪
链接:https://ac.nowcoder.com/acm/contest/1084/C来源:牛客网烹饪时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言65536K64bit IO Format: %lld题目描述“你已经是一个成熟的孩子了,要学会自己烹饪了!”小 Y 上山拜师学艺,经过 年之长的厨艺练习,已成为当世名厨,今...原创 2019-09-16 15:09:31 · 469 阅读 · 0 评论 -
Wannafly挑战赛22B.字符路径(动态规划)
链接:https://ac.nowcoder.com/acm/contest/160/B来源:牛客网字符路径时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 262144K,其他语言524288K64bit IO Format: %lld题目描述给一个含n个点m条边的有向无环图(允许重边,点用1到n的整数表示),每条边上有一个字符,问图上有几条路径满足路径上经...原创 2019-09-18 21:43:23 · 183 阅读 · 0 评论 -
Comet OJ - Contest #11B .usiness(类背包的动态规划)
题目链接:https://www.cometoj.com/contest/67/problem/B题目大意:你要计算如下模型能得到的最大钱数:有n天,初始时你的钱数为0,有m种可能操作,第i种会使你当前失去a_i的钱数并在n天结束后返还b_i的钱数。每一天可以执行任意多种操作,每种任意次(但每次操作后你的钱数不能为负)。每天结束时你会获得一个与当前持有钱数x...原创 2019-09-22 21:27:42 · 192 阅读 · 0 评论 -
UVa1543.圆和多边形+UVa12063.零和一(动态规划)
两道都是刘汝佳《算法竞赛入门经典第二版》的课后习题1.UVa1543.圆和多边形题目链接:https://vjudge.net/problem/UVA-1543题目大意:刘汝佳紫书307页习题9-14思路:dp(i,j,k)表示在第i~j个点中选择k个点构成多边形的最大面积,那么这个题就像一个类区间dp的方法,我们枚举中间点x,那么有dp[i][j][k]=max(dp[i...原创 2019-09-27 16:21:00 · 296 阅读 · 1 评论 -
牛客假日团队赛1——J——分组(DP)
链接:https://ac.nowcoder.com/acm/contest/918/J来源:牛客网时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言65536K64bit IO Format: %lld题目描述在Farmer John最喜欢的节日里,他想要给他的朋友们赠送一些礼物。由于他并不擅长包装礼物,他想要获得他的奶牛们的帮助。你可能能...原创 2019-07-06 19:01:48 · 297 阅读 · 0 评论 -
牛客专题——被3整除的子序列——背包DP
链接:https://ac.nowcoder.com/acm/problem/21302来源:牛客网题目描述给你一个长度为50的数字串,问你有多少个子序列构成的数字可以被3整除答案对1e9+7取模输入描述:输入一个字符串,由数字构成,长度小于等于50输出描述:输出一个整数示例1输入复制132输出复制3示例2输入复制...原创 2019-07-10 21:07:44 · 292 阅读 · 0 评论 -
动态规划练习第二弹
1.照明系统设计——UVa 11400 题目链接:https://vjudge.net/contest/232313#problem/F 思路:既然只能从电压低到电压高替换,那么就相对于电压排序,注意每种电压的灯泡要么全换要么全不换,不然会耗费两种电源的钱。排序后,设s[i]为前i种灯泡的数量和,d[i]为灯泡1~i的最小花费,则有 ...原创 2018-10-01 19:23:25 · 254 阅读 · 0 评论 -
UVa1625——颜色长度(DP)
题目链接:https://vjudge.net/contest/232313#problem/H思路:紫书上写的很详细了:不是等到一个颜色全部移完之后再相加,而是每次都计算已经开始但还没结束的颜色的个数并将长度累加。所以,用res[i][j]表示第一个串还剩i个,第二个串还剩j个,已经开始但还没结束的字符个数。dp[i][j]表示第一个还剩i个,第二个串还剩j个,还需要的最小指标函数。...原创 2018-10-06 10:36:53 · 283 阅读 · 0 评论 -
最优矩阵链乘——NBUT 1003
题目链接:https://vjudge.net/problem/NBUT-1003思路:也是和紫书上的一样,如果最后一次乘法是第k个,则从A1,A2,....Ak和Ak+1,Ak+2......An两个子序列都是最优乘法了,所以我们只需保证两个子结构最优,而子结构也是可以这样划分的,所以我们每次考虑的问题就是,把Ai,Ai+1...Aj乘起来的最少乘法次数,用dp[i][j]表示这个问题的值,...原创 2018-10-06 10:47:20 · 240 阅读 · 0 评论 -
动态规划练习——UVa10003——区间dp
题目链接:https://vjudge.net/contest/232313#problem/I紫书上的动态规划例题,很明显是一个区间线性规划的问题,想起之前做过的矩阵链乘,这题和它很像,枚举方向都是向j-i递增的方向,这里有个大神的区间dp模板的总结:http://www.cnblogs.com/zsboy/archive/2013/03/08/2950261.html,可以强化理解。...原创 2018-10-13 17:12:14 · 213 阅读 · 0 评论 -
UVa 1220——树形dp
题目来源:https://vjudge.net/problem/UVA-1220题目描述:紫书上树形dp的第二个例题,在树的最大独立子集上加上了一个判断唯一性。所以两个同时dp即可,转移方法如下:对于最大独立子集:1.dp[u][1]表示选了u这个节点,则子节点不能选,dp[u][1]+=dp[v][0];2.dp[u][0]表示没选u这个节点,那么子节点可选可不选,取其中最大的即...原创 2018-10-18 17:00:41 · 199 阅读 · 0 评论 -
HDU 2546——背包dp
题目链接:https://vjudge.net/contest/172125#problem/B一道很常规的背包dp,不过要考虑几个细节:最后5块钱的话什么都可以买,所以最后五块钱肯定要买最大值的菜价,然后对于m-5的钱,就是裸背包问题了,直接上01背包模板就行。代码:#include <cstdio>#include <cstring>#include ...原创 2018-10-24 19:35:20 · 136 阅读 · 0 评论 -
UVa1629——切蛋糕——记忆化搜索
题目链接:https://vjudge.net/contest/232314#problem/G思路:这种模型挺常见的吧,我还不会,学习一下。一个典型的棋盘dp,可以想到分成一个个小块儿,判断块中的樱桃数,如果为0,就不能切,保留,如果为1,说明已经切好了,返回0(切割的长度),如果大于1,就可以遍历整个大块儿,从左到右,从上到下,将状态转移。所以,用dp[u][d][l][r]表示边界线上界...原创 2018-10-27 11:36:46 · 667 阅读 · 0 评论 -
(转)HDU2639 01背包 第K优决策
求第K优解对于求次优解、第K优解类的问题,如果相应的最优解问题能写出状态转移方程、用动态规划解决,那么求次优解往往可以相同的复杂度解决,第K优解则比求最优解的复杂度上多一个系数K。其基本思想是将每个状态都表示成有序队列,将状态转移方程中的max/min转化成有序队列的合并。这里仍然以01背包为例讲解一下。首先看01背包求最优解的状态转移方程:f[i][v]=max{f[i-1][v],f[i-...转载 2018-11-10 19:54:51 · 159 阅读 · 0 评论 -
UVa1630——串折叠——记忆化搜索+区间规划
题目链接:https://vjudge.net/contest/232314#problem/I思路:dp(l,r)表示子串str(l,r)的最短折叠子串长度,且用一个string类型的二维数组sub[l][r],表示原串str的子串l~r,这样,转移方案如下:1.边界条件:l==r,则子串长度就是1,dp[l][r]=12.L<R的时候,很明显有最优子区间的结构特点,将区间切分...原创 2018-11-15 16:34:15 · 414 阅读 · 0 评论 -
牛客练习赛32B——Xor Path
题目链接:https://ac.nowcoder.com/acm/contest/272/B思路参考于:https://blog.csdn.net/westbrook1998/article/details/84668653挺好的一道题,一个树中每个节点有一个权值,那么对于任意两个点i,j,以他们的最短路上经过的所有节点的权值异或和为最短路,问最后对于所有i:1~n-1,j:i+1~n的所...原创 2018-12-05 00:07:53 · 182 阅读 · 0 评论 -
UVA - 1632 (区间DP)
题目链接:https://vjudge.net/contest/232314#problem/M给定一条直线,直线上有很多宝藏,每个宝藏有一个坐标和消失时间,你可以选择从任何位置开始,每单位时间移动一个单位距离,问你能否在所有宝藏消失之前拿走所有宝藏,如果能,求最小时间。思路基于这样一个事实:无论从任一点A开始,假如A点有相邻点B,B有相邻点C,如果要求时间最少,就不可能先访问C再访问B,...原创 2018-12-30 23:38:33 · 169 阅读 · 0 评论 -
2019多校第一场——A——Altruistic Amphibians
题目链接:http://acm.csu.edu.cn:20080/csuoj/contest/problem?cid=2178&pid=A大意是,井底有一些青蛙,他们都有自己的高度,重量和跳跃高度,现在可以用别的青蛙搭梯子,任何一个青蛙身上的叠加重量不能超过他自身,问最佳情况下能逃离多少青蛙简单推论后发现,假设当前最上面的青蛙的重量为wi,再往上累加青蛙wj的重量应满足2*wj&l...原创 2019-03-11 18:16:34 · 575 阅读 · 0 评论 -
cf 551 div2 D——Serval and Rooted Tree (树形DP)
题目链接:http://codeforces.com/contest/1153/problem/DD. Serval and Rooted Treetime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputNow ...原创 2019-04-30 22:40:14 · 242 阅读 · 0 评论 -
codeforce rounc 552div3 F——类区间动态规划
题目链接:http://codeforces.com/contest/1154/problem/F题目大意:你需要在n把铲子中买k把,其中有m个优惠券,每个优惠券表示为x,y,意思是如果你买了x个铲子,其中最便宜的y各铲子就免费了。问你买k把铲子需要花费的最小价格思路:动态规划,首先排序,因为价格是从小到大的。 dp[i]表示买前i个铲子能得到的最大优惠价格,这个最...原创 2019-05-07 21:49:41 · 204 阅读 · 0 评论 -
动态规划练习第一弹
苦练动态规划中,现在还处于玄学推转移方程的阶段,得多多学习别人的思想。(1)巴比伦塔——UVa 437 题目链接:https://vjudge.net/contest/232313#problem/B 紫书上的dp例题,思路也很清晰易懂:一个立方体最多只有三个不同的朝上的面,所以最多也只有90种面,而只有顶面的尺寸会影响到后续的决策,所以用动态规划处理,...原创 2018-09-25 20:40:12 · 219 阅读 · 0 评论