动态规划
文章平均质量分 52
famousDT
掌握C/C
展开
-
SOJ-2111(小强请吃饭)(0-1背包问题,动态规划)
0-1背包问题1.最优子结构性质(用剪贴思想证明)y1,y2,… yn如果是一个最优解,因若不然,z2,z3,…zn是上述子问题的最优解,从而y1,z2,z3,…zn是0-1背包问题的最优解,这与y1,y2,… yn是最优解矛盾2.递归关系m(i,j)=max{m[i+1][j],m(i+1,j-wi)+vi} j>=wim[i][j]=m[i+1][j] 0 m[n]原创 2011-10-31 16:30:54 · 2088 阅读 · 1 评论 -
POJ-3797(状态转移)(Tiling a Grid With Dominoes )
【题目描述】多米诺骨牌覆盖【解题思路】1.fi肯定可以由fi-1再竖着摞两块砖;2.fi还可以由fi-2再横着摞四块砖;3.fi还可以是以下情况*2,即横两块、竖一块,竖的一块在两头;----||命名这种情况为a其中--和 | 表示一块横砖和一块竖砖; |4.f原创 2012-04-20 09:34:46 · 1739 阅读 · 2 评论 -
POJ-3356(编辑距离)(AGTC)
/*==========================================================*\| 编辑距离:| d[i, j] = minimum(| d[i-1, j] + 1, 在b上j位置删除字符(或在a上i-1位置插入字符)| d[i, j - 1] + 1, 在b上j-1位置插入字符(或在a上i位置删除字符)| d[i-1, j - 1] + co原创 2012-05-01 11:35:43 · 617 阅读 · 0 评论 -
POJ-2241(简单动态规划)(The Tower of Babylon )
/*==========================================================*\| [题目描述]有N种石头(每种数量无限)题目给出每种的长宽高| 先要求将其按底面积递减的顺序从下往上堆(注意是严格递减,对应边也不能相等) | 问最多可以堆多高?| [解题思路]分析:将每块石头变成3块,block代表所有石头,有3个成员x,y,z. 然后将其按照底原创 2012-04-13 10:48:25 · 683 阅读 · 0 评论 -
POJ-3132(一个数能表示成至多k个素数的和的种类数)(Sum of Different Primes )
又是动态规划int ans[1125][15] = {0};int main(){ int n, k, prim[1000], i, x = 0, len = 187, j; int d[] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107, 109,1原创 2012-04-13 14:16:35 · 798 阅读 · 0 评论 -
POJ-2663(状态转移)(Tri Tiling)
这个题目类似 POJ 2506,不过是大矩形的高度增加了。fun[n] = 3 * fun[n-2] + 2 * fun[n-4] + 2 * fun[n-6] + 2 * fun[n-8]+…… 直到方括号内表达式的值为0。解释一下,3 * fun[i-2] 是最右边有 3 行 2 列的三种情况。后面的2*fun[i-X],则是最右边有 X 列类似以下的结构的情况:原创 2012-04-06 10:24:55 · 1090 阅读 · 0 评论 -
POJ-3639(动态规划,精度处理)(Exchange Rates)
【题目描述】汇率兑换问题,给出 n 天的汇率(US 与 Canada),求给出1000Canada dollars,进行反复兑换,最终能得到的Canada dollar有多少?(注意:每进行兑换一次要扣除3%的税费),输入每天 1 美元可以兑换的加元数量。【解题思路】简单题,只是处理精度要有点技巧。因为每次兑换会舍去美分。dp[i][0]:表示第i天最多的Canadian;原创 2012-04-01 10:04:28 · 977 阅读 · 0 评论 -
SOJ-2708(简单dp,不会怎么记录路径)
参考了别人记录结果路径的方法,其余为自己所想double a[30];double d[30][30];double ans[10005][30];int path[10005][30];char s[10000];void process(char c){ int i; switch (c) { case '2': for原创 2012-03-14 09:58:00 · 470 阅读 · 0 评论 -
POJ-1384(完全背包)(Piggy-Bank)
【题目描述】已知储蓄罐满时的质量f以及空时质量e,有n种硬币,每种硬币的价值为p,质量为w,求该储蓄罐中的最少有多少钱?int p[501], w[501];int dp[50005];int main(){ int cases; cin>>cases; while (cases--) { int e, f; cin>>e>>f; int W = f - e;原创 2012-03-29 15:09:29 · 1573 阅读 · 0 评论 -
POJ-1260(经典动归,选择或是不选择)(Pearls)
【题目描述】现在要买若干种价值的珍珠,但买某种珍珠必须多付10颗此种珍珠的价钱,一颗珍珠可以用比它贵的珍珠充数,因此有时候用贵的珍珠来代替便宜的可能更省钱,输入要买的若干种珍珠,在可用高价珍珠充数的条件下,问最少需要花费多少钱.int d[105][2];int dp[105][105];int main(){ int t, n; cin>>t; while (t--) {原创 2012-03-29 12:14:18 · 1606 阅读 · 0 评论 -
POJ-1159(把一个字符串变成回文串需要多少步操作)(Palindrome)
/*==========================================================*\| 动态规划| 设ch[1]..ch[n]表示字符串1至n位,i为左游标,j为右游标 ,则i从n递减,j从i开始递增。| min[i][j]表示i和j之间至少需要插入多少个字符才能对称,初始置全0 ,| 我们最终需要得到的值是min[1][n].| PS:short原创 2012-03-29 10:04:54 · 1237 阅读 · 0 评论 -
【SOJ-2680】dollars变形
求一个数能被平方数组合的种数int main(){ ll i, j; ll d[1000]; for (i = 1; i < 200; ++i) { if (i * i <= 1000) { d[i] = i * i; } else { break; } } ll ans[1005] = {0}; ans[0] = 1; for (i = 1; i <原创 2012-08-01 17:36:03 · 613 阅读 · 0 评论