
DP
文章平均质量分 62
Jming_
Someday I will come back!
展开
-
DP 之 codeforces 416B
比赛时,没有想到用dp可以解决,jie'f原创 2014-04-13 23:49:12 · 723 阅读 · 0 评论 -
01背包(打印路径) 之 uva 624
// [7/21/2014 Sjm]/*此题直接根据01背包的求解思路,记录路径,再递归输出。。1A。。注:对于最后一个测试用例 43 2 也是满足题目要求的,输出它也是对的。*/#include #include #include #include #include using namespace std;const int MAX_NUM = 25;const i原创 2014-07-21 10:26:03 · 663 阅读 · 0 评论 -
01背包 + 数学(平衡) 之 uva 562
// [7/21/2014 Sjm]/*题目关键:Given a bag with a maximum of 100 coins, determine the most fair division between two persons.This means that the difference between the amount each person obtains should原创 2014-07-21 11:41:32 · 684 阅读 · 0 评论 -
01背包(体积为负,改变区间) 之 poj 2184
// [7/21/2014 Sjm]/*题意:maximize the sum of TS and TF, but both of these values to be non-negative. 解决思路:以 TS 作为体积,TF作为价值,在保证体积、价值非负的情况下,求解 sum,取其所有情况的最大值。 难点:1)体积出现负数,将区间改变 [-100000, 100000]原创 2014-07-21 16:20:38 · 679 阅读 · 0 评论 -
01背包(求前一个的最大价值-->求前K个的最大价值) 之 hdu 2639
// [7/21/2014 Sjm]/*此题我想的思路错了,情况考虑漏了。。。 解法是由 求前一个的最大价值-->求前K个的最大价值 的转化。 求前一个最大价值: dp[i][j] = max(dp[i-1][j], dp[i-1][j-C[i]] + W[i])求前K个的最大价值 同样,dp[i][j]的前 k 个最大价值,是依赖于 dp[i-1][j] 的前 k原创 2014-07-21 22:20:38 · 711 阅读 · 0 评论 -
01背包(给容量增加限制条件) 之 hdu 3466
// [7/24/2014 Sjm]/*模拟一组测试数据:2 105 10 53 5 61)若先选择第一组先来:背包所用容量: 0 1 2 3 4 5 6 7 8 9 10 第一遍循环: 0 0 0 0 0 0 0 0 0 0 5 第二遍循环: 0 0 0 0 0 6 6 6 6 6 62)若先选择第二组先来:原创 2014-07-24 12:12:41 · 956 阅读 · 0 评论 -
最大连续子序列和(经典DP) 之 hdu 1231 最大连续子序列
// [8/1/2014 Sjm]/*经典问题。。。*/#include #include #include using namespace std;const int MAX_K = 10005;int arr[MAX_K];int main(){ freopen("input.txt", "r", stdin); freopen("output.txt", "w原创 2014-08-01 15:16:54 · 548 阅读 · 0 评论 -
DP + math 之 Codeforces 126D - Fibonacci Sums
// [7/12/2014 Sjm] /*题目:By the given number n determine the number of its possible different decompositions into Fibonacci sum. 前提:1) F[86] 是 >=10^18 的最大菲波那切数;2)(由菲波那切数列的构造式决定,举几个例子就可以知道了)假原创 2014-07-12 21:26:20 · 821 阅读 · 0 评论 -
01背包变形 之 hdu 2126 Buy the souvenirs
/*题意:T组测试数据,每组给出 n 和 m,n代表商品数目,m是所拥有的钱,然后给出 n 个商品价格,求出可以买的最多商品种类数,以及对应的方案数 思路:对于此题,第一个想法便是以价格作为费用,件数1作为价值,01背包即可求出花费 m 所能获得的商品的最大件数 dp[m]。不过,又要求其方案数,自己试着敲了一下代码WA,后来参考了此篇博客AC掉了。。。需要建立一个数组 selec原创 2014-07-31 11:01:35 · 608 阅读 · 0 评论 -
状态压缩 之 UVA 10944 - Nuts for nuts..
// [9/19/2014 Sjm]/*dis[j][k] := 从 j 点到 k 点的最少步数,由于They can travel in all 8 adjacent direction in one step.故而 dis[j][k] = max( abs(Xj - Xk), abs(Yj - Yk) ) f[j][i] := 在 i 状态下,最后收集坚果 j 的最少步数 n原创 2014-09-19 16:54:18 · 1116 阅读 · 0 评论 -
01背包 + 概率 之 hdu 2955
/*看到此题时,第一个想法是:以P作为体积,Pj作为费用,Mj作为价值。但是,double类型的不能作为数组下标,于是此法行不通。于是,从另一角度考虑:被抓的概率不能超过上限,即不被抓的概率要大于下限(下限 = 1 - 被抓概率的上限)。以总的银行金额作为体积,每一个银行金额作为费用,不被抓的概率作为价值。即 dp[i][j] := 抢劫了前 i 个银行,所获金原创 2014-07-20 17:17:02 · 625 阅读 · 0 评论 -
整体贪心 + 局部01背包 之 hdu 2546
// [7/16/2014 Sjm]/*自己没想到将5元单独提出来,,结果一致wa。。。01背包变形:目标:尽量使卡上的余额最少,也就是说尽可能让花销最大。 分析:购买菜时,只可能出现三种情况 :1)M 2)饭卡金额M >= 所有菜的价格总和sum: 答案即 M-sum;3)饭卡金额M 5元是可以买最贵的菜的最小花费,再尽可能的花去(M-5)元。 a.5元直接提原创 2014-07-16 21:07:33 · 556 阅读 · 0 评论 -
01背包(模板题) 之 poj 3624
01背包模板题。。。#include #include #include #include #include using namespace std;const int MAX = 3410, max_w = 12885;int N, M;int W[MAX], D[MAX], dp[max_w];int Solve() { memset(dp, 0, sizeof(dp原创 2014-07-16 21:26:17 · 738 阅读 · 0 评论 -
DP 之 SPOJ SCUBADIV (三维 01背包变形)
题目地址:http://www.spoj.com/problems/SCUBADIV/为更好的解决这个题目,首先应对二维01背包有一定了解,推荐题目: hdu 2602 (友情提醒:界面有点小恐怖,但是一道二维01背包入门题)/*定义: dp[i][j][k] := 取前 i 个物品, 所能获得氧气体积(至少)为 j, 氮气(至少)体积为 k, 所需的最小重量(1)初始化条件: d原创 2014-03-29 18:38:41 · 1069 阅读 · 0 评论 -
状态压缩DP 之 poj 2686
之前敲了一个 “旅行商问题”原创 2014-04-29 17:53:38 · 697 阅读 · 0 评论 -
DP 之 poj 2229
// [3/21/2014 Sjm]/*解法分析:依次列出 N=1, 2, 3, 4, 5, 6, 7, 寻找规律:(1) 若 n 为奇数:dp[n] = dp[n - 1] (第一个数必是1, 将第一个数去掉, 其所剩个数 即 dp[n-1])(2) 若 n 为偶数: 1) 第一个数字为1,将第一个数去掉, 其所剩个数 即 dp[n-1] 2)第一个数为偶数, 将2提出去,即可得原创 2014-03-24 02:04:27 · 548 阅读 · 0 评论 -
DP 之 poj 3616
dp[i] = max(dp[i], myNode[i].myvalue + dp[j]);// 条件是: myNode[j].myend + R原创 2014-04-04 12:27:36 · 579 阅读 · 0 评论 -
DP 之 poj 3280
// [4/4/2014 Sjm]/*状态: dp[i][j] := 从 i 位置到 j 位置构成回文串,所需要的最小开销决策:1) 若 str[i] == str[j], 则此时可获得 dp[i][j] 的一种情况,即 dp[i][j] = dp[i+1][j-1] 2)若 str[i] != str[j] 或 str[i] == str[j] 皆可能有以下操作: 1、可删除 st原创 2014-04-05 01:04:05 · 668 阅读 · 0 评论 -
DP 之 nyist 15 (刘汝佳黑书113页 例题1括号匹配)
对 “刘汝佳黑书113页 例题1括号匹配 ”学习总结。目标:AC poj 3280刘汝佳黑书113页 例题1括号匹配:原创 2014-04-05 01:13:53 · 913 阅读 · 0 评论 -
DP 之 poj 2955
// [4/4/2014 Sjm]/*状态: dp[i][j] := 从位置 i 到位置 j, 最长规则串的长度决策:1) 若 str[i] == '(' && str[j] == ')',则 dp[i][j] = max(dp[i][j], dp[i + 1][j - 1] + 2);(S) = S最长的规则串的长度 + 22)若 j-i >= 1, 则:for (int k =原创 2014-04-05 01:06:37 · 613 阅读 · 0 评论 -
DP 之 poj 2385
// [3/24/2014 Sjm]/*先模拟一下测试用例:时间 掉苹果的那棵树 对应时间下在跑了 w 次的情况下获得苹果的最大值 w = 0(在1处) 1(在2处) 2(在1处) Bessie 在哪里,就说明哪里的苹果可接 1 2 0 1 0原创 2014-03-25 13:00:40 · 603 阅读 · 0 评论 -
DP 简单题 之 poj 1163
DP简单题。。。原创 2014-05-08 23:03:42 · 492 阅读 · 0 评论 -
状态压缩 之 hdu 1074 Doing Homework
// [9/11/2014 Sjm]/*hdu 1074 (状态压缩)dp[i]: 表示在 i 状态时的最优解 (i状态: i数值用二进制表示, 若二进制数第 n 位为1,代表第 n 个课程已被计算)*/原创 2014-09-11 22:05:43 · 526 阅读 · 0 评论