
动态规划
文章平均质量分 75
_Wilbert
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
UVAlive-4643 Twenty Questions
题目大意: 有m个问题,n个人,给出这n个人对这m个问题的回答,只有“Yes”和“No”这两种回答,所以用1表示yes,0表示no,然后问你最少用几次询问问题能分别出所有人。 一个例子,比如 3 4 001 011 100 000 用两次即可,先问第3个问题,如果是1则问第2个问题,如果是0则为第1个问题,得到的答案是2而不是3! 解题思路: 状态压缩动态规划+记忆化搜索原创 2016-08-27 20:56:45 · 749 阅读 · 0 评论 -
Codeforces-713C Sonya and Problem Wihtout a Legend
题目大意: 给你一个序列,让你把它变成一个严格递增的序列。 对每个数字,无论+1或者-1都消耗1,问你把它变成严格递增的序列的最小cost 解题思路: DP 首先根据题目,a[i+1] >= a[i] + 1,两边同时减去i+1,就得到a[i+1] - (i + 1) >= a[i] - i 设b[i] = a[i] - i,则b序列是不降序列,那么问题就变成了将序列变成一个不降序列所原创 2016-10-10 21:05:20 · 514 阅读 · 0 评论 -
POJ-2955 Brackets
题目大意: 给你一个只由'('、')'、'['、']'组成的字符串,问你这个字符串的子串能够匹配的最长长度是多少。 能够匹配的意思是这样的: 1.如果s是个空串,那么它是匹配的。 2.如果子串是(s)或者[s],那么它也是匹配的,其中s是匹配的 3.如果s是匹配的,s'也是匹配的,那么ss'也是匹配的 解题思路: 标准的区间DP 直接按照上面3个定义来考虑区间DP就好。 代码:原创 2016-09-07 11:26:19 · 734 阅读 · 0 评论 -
HDU-5900 QSC and Master
题目大意: 有n对二元组(key, value),两个相邻的元组间如果key的不互质,那么可以被移除,并获得两个元组的value值之和的分数,问你最多能有多少分数。 解题思路: 区间DP 按照最裸的区间DP模型用记忆化搜索写是要超时的... 本题的模型可以参考POJ-2955 Brackets题解这里有~ 设dp[i][j]表示区间[i, j]能获得的最大分数状态转移就可以写成 dp原创 2016-09-19 18:25:33 · 734 阅读 · 0 评论 -
HDU-1074-Doing Homework
Problem Description Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Every teacher gives him a deadline of handing in the homework. If Ignatius hands in原创 2015-08-23 20:06:06 · 499 阅读 · 0 评论 -
Codeforces-687C The Values You Can Make
Pari wants to buy an expensive chocolate from Arya. She has n coins, the value of the i-th coin is ci. The price of the chocolate is k, so Pari will take a subset of her coins with sum equal to k原创 2016-07-01 13:07:21 · 1477 阅读 · 0 评论 -
Codeforces-698A Vacations
Vasya has n days of vacations! So he decided to improve his IT skills and do sport. Vasya knows the following information about each of this n days: whether that gym opened and whether a contest was原创 2016-07-20 14:55:07 · 638 阅读 · 0 评论 -
AOJ-190 乘积最大问题
题目大意: 设有一个长度为N的数字串,要求使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1部分的乘积能够为最大。其中n 解题思路: 动态规划 dp[i][j]表示当i个乘号在第j位的时候,前面的最大值。 这样状态转移方程就得到为: dp[i][j] = max(dp[i][j], dp[i-1][k] * subString(s, k, j)); 其中k为[i-1,原创 2016-08-12 10:09:36 · 883 阅读 · 0 评论 -
UVA-10817 Headmaster's Headache
题目大意: 有s个学科,现在在学校有n个教师在教书,这些教师必须要被雇佣,现在还有m个教师正在应聘。现在给出这n个在职教师的工资和能教的科目,给出m个应聘教师的工资和能教的科目,现在希望这s个科目,每个都有至少两个教师教授,问你最少需要支付的工资是多少。 解题思路: 动态规划。状压DP。 dp[i]表示i这个状态需要支付的最少工资。因为每个科目至少两个教师,且最多只有8个科目,所以很明显状原创 2016-08-24 11:47:26 · 617 阅读 · 0 评论 -
Codeforces-710E Generate a String
题目大意: 有三个操作,插入删除和复制。其中插入和删除均耗费x时间来插入或删除一个字符,复制耗费y时间将当前文件内所有字符复制并粘贴(就是字符*2),现在需要生成n个字符,问你最少需要的时间。 解题思路: DP dp[i]表示生成i个字符需要的最少时间,那么状态转移方程就是 dp[i] = min(dp[i-1] + x, dp[i+1] + x, dp[i / 2] + y); 代码原创 2016-08-23 13:06:44 · 907 阅读 · 0 评论 -
BZOJ-1177 [Apio2009]Oil
解题思路: 一种非常神奇的枚举策略...不过这种枚举策略...是需要DP来完成的 嘛...这种神奇的题目我独立肯定是做不来的...所以我是看着这篇博客写的...传送门 嘛...这篇博客好就好在...你必须要想通了你才知道这个代码是怎么回事...太可怕了%%% 首先,因为题目说了, 必须要是三个k*k的矩形,那么其实相对来说比较容易的想法就是一个个去枚举,但是肯定会超时。 那么考虑一个问题原创 2016-09-04 14:37:41 · 667 阅读 · 0 评论 -
BZOJ-1010 [HNOI2008]玩具装箱toy
解题思路: 斜率优化DP 这道题= =嘛算是斜率优化的入门题目了。还是非常经典的感觉。 首先考虑,这道题目有经验的小伙子一眼就可以想出来状态转移方程是什么。 显然是 dp[i] = min(dp[i], dp[j] + pow(sum[i] - sum[j] + i - j - 1 - L, 2)); 但是想出来之后,想都不用想就知道这个题目,显然是不会是这么简单就能解决的了。 因为n原创 2016-09-13 12:39:42 · 617 阅读 · 0 评论 -
UVAlive-3363 String Compression
题目大意: 给你一个字符串,让你把它压缩,比如gogogo可以压缩成3(go),letsgogogoletsgogogo可以压缩成2(lets3(go)),然后问你压缩后的最短长度。 解题思路: 区间DP。 一开始我以为是个基础的DP。没想到在第二个样例过不去,才发现这不是个基础的DP,也不是...这应该算是基础的区间DP吧。 首先设dp[i][j]表示从i到j这个区间内的字符串能压缩的原创 2016-08-27 21:12:24 · 680 阅读 · 0 评论 -
入门动态规划问题
hihocoder这周欠了三题,于是今天一波结束了。然后发现这三个题目似乎都很简单,并且还是一类问题里面的。所有就写成一次的吧。 动态规划问题,说起来,理论上是每个搞ACM的人都会学的,而且应该是最开始就学的。因为动态规划问题是各种各样比赛的宠儿啊,几乎每次比赛必出动态规划。楼教主的“男人八题”里面就有几个动态规划问题,是需要结合数据结构和动态规划才能解决的问题。不过不在这次范围内。原创 2016-12-18 15:38:21 · 561 阅读 · 1 评论