
算法-动态规划
文章平均质量分 51
winglessbird
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
dp-更难的矩阵取数问题
题目: 一个M*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,先从左上走到右下,再从右下走到左上。第1遍时只能向下和向右走,第2遍时只能向上和向左走。两次如果经过同一个格子,则该格子的奖励只计算一次,求能够获得的最大价值。 例如:3 * 3的方格。1 3 32 1 32 2 1能够获得的最大价值为:17。1 -> 3 -原创 2016-01-21 21:18:21 · 427 阅读 · 0 评论 -
BestCoder Round #75 King's Game
题目为了铭记历史,国王准备在阅兵的间隙玩约瑟夫游戏。它召来了 n(1\le n\le 5000)n(1≤n≤5000) 个士兵,逆时针围成一个圈,依次标号 1, 2, 3 … n1,2,3…n。第一轮第一个人从 11 开始报数,报到 11 就停止且报到 11 的这个人出局。第二轮从上一轮出局的人的下一个人开始从 11 报数,报到 22 就停止且报到 22 的这个人出局。第三轮从上一轮出局的人的下一个原创 2016-03-13 09:44:16 · 287 阅读 · 0 评论 -
动态规划-背包总结
01背包问题 n个物品重量为wi,价值为vi 从里面挑取总质量和<=W的物品,求最大的价值。思路 枚举最后一个物品是否被选。 状态dp[i][j] 在前i个物品里面背包大小为j下的最大价值。 dp[i][j]=max(dp[i−1][j],dp[i−1][j−w[i]]+v[i])dp[i][j] = max(dp[i-1][j],dp[i-1][j-w[i]] + v[i])完全原创 2016-03-06 16:03:29 · 321 阅读 · 0 评论 -
第二类斯特林数的递推公式
定义: 将p个物体划分成k个非空的不可辨别的集合的方法数。dp[p][k] = dp[p-1][k] * k + dp[p-1][k-1];因为有k种选择。 dp[0][1] = 1; for(int i=1;i<=4000;i++) { for(int j=1;j<=i;j++) { dp[i][j] = (dp[i-1][j] * j + dp[i-1][j-1])原创 2016-02-02 23:12:05 · 1713 阅读 · 0 评论 -
leetcode Climbing Stairs
class Solution {public: int climbStairs(int n) { if(n == 0) return 0; if(n == 1) return 1; if(n == 2) return 2; int prepre = 1; int pre = 2;原创 2016-02-14 11:35:19 · 200 阅读 · 0 评论 -
动态规划-跑跑卡丁车
题意:跑跑卡丁车是时下一款流行的网络休闲游戏,你可以在这虚拟的世界里体验驾驶的乐趣。这款游戏的特别之处是你可以通过漂移来获得一种加速卡,用这种加速卡可以在有限的时间里提高你的速度。为了使问题简单化,我们假设一个赛道分为L段,并且给你通过每段赛道的普通耗时Ai和用加速卡的耗时Bi。加速卡的获得机制是:普通行驶的情况下,每通过1段赛道,可以获得20%的能量(N2O).能量集满后获得一个加速卡(同时原创 2016-02-11 21:30:30 · 698 阅读 · 0 评论 -
动态规划-Pearls
题意:(来自lee+的翻译)题目意思是说,有几种不同的珍珠。每种珍珠都有它的单价。当然质量高的珍珠价格一定也是高的。为了避免买家只买1个珍珠。就要求不论是买了多少个珍珠都是需要在购买数量上加10.之后乘上单价。求出总的花费!例如:买5个单价是10的珍珠。需要的花费是(5+10)*10= 150.买100个单价是20的珍珠需要的花费是(100+10)*20= 2200.总共需要的花费原创 2016-02-11 21:29:34 · 359 阅读 · 0 评论 -
概率dp- Ilya and Escalator
题目 cf518D 大致意思是一个由n个人组成的队列,每个单位时刻队列头可以选择出队列概率为p,或者是不出队列,概率为1-p. 问过了t个单位时刻, 出队列的人数的期望。思路 如果能计算出P{X=i}(0=i=t)P\{X=i\}(0 那么就能解决这个问题了。 答案就是∑i=0nP{X=i}∗i\sum_{i=0}^{n} P\{X=i\} *i 对于P{X=i原创 2016-02-11 21:28:37 · 316 阅读 · 0 评论 -
动态规划-搬寝室
题意:从n个数字中选取k对数,使得他们的差的平方和最小。思路:dp[i][j] 表示从前i个数字中选取j对数字的最优解。1.选了第i个数字dp[i][j] = dp[i-2][j-1] + (a[i-1] - a[i]) * (a[i-1] - a[i]);2.没有选第i个数字dp[i][j] = dp[i-1][j].结果是2者选较小者。原创 2016-01-29 22:15:48 · 320 阅读 · 0 评论 -
动态规划-hdu1227Fast Food
题意:从n个地方选取k个地方,定义某个点的"距离"为 该点到k个点的距离 的最小值。 求n个点"距离"的最小值。思路:1.当k=1的时候我们可以轻松解决。当k>=2的时候我们尽量往k=1靠拢, 不断让k--, 我们可以把长度为n的 切成k段。 k段中的每一段取的点都是中位数所在的点。2.===== ++++ --------------------- (原创 2016-01-28 23:31:55 · 334 阅读 · 0 评论 -
动态规划-Employment Planning
题目:雇佣一个人需要花费,日常工资需要花费,解雇一个人也需要花费。 然后给出了每个月的最小员工数,求如何安排使得开销最小,求出最小开销。思路:dp[i][j] 表示第i个月雇佣j个人所需要的开销。 然后思考dp[i-1][j']向dp[i][j]转移的方程。dp[i][j] = min(dp[i-1][j'] + cost(j'->j) + j个人的工资); 如果j'原创 2016-01-23 16:14:58 · 430 阅读 · 0 评论 -
状态压缩dp-HDU1074-Doing Homework
题目: 每门课的作业有截止日期和完成作业所需要的日期, 然后有多门课,如果每门课没完成会有一个惩罚,惩罚为多出来的时间。 求做作业的顺序,使得惩罚最小。有T组数据, 每组数据 给出N门课,每门课给出了S(课程名) D(截止日期) C(完成作业所需的时间)思路: 课的总数 枚举所有的i中的1, dp[i] = dp[j] + cost[idp[i] = dp[j] + max(原创 2016-01-22 22:53:31 · 334 阅读 · 0 评论 -
#动态规划# 子序列个数
题意求不重复的子序列的个数 Sample Input4 1 2 3 2 Sample Output13思路dp[i] 表示考虑到第i位的 所有可能数. 1. 如果a[i] 是第一次被使用那么,dp[i] = dp[i - 1] * 2 + 1. 因为前面的可以取可以不取. - 前面不取的话,就是a[i]一个数字。 - 如果前面取的话,那么a[i] 取不取则有dp[i - 1]原创 2016-02-28 15:58:37 · 260 阅读 · 0 评论