随笔分类 - dp
摘要:题目是给出V个村庄,取出P个做为邮局,要求每个村庄到邮局的距离和最小。先考虑只有一个邮局的情况,不管你怎么放邮局和最小的情况总是在中点的位置。再来考虑P>1的情况:假设P-1个邮局已经选好,那么最后一个只要在剩下的未选村庄中选择一个 使和加起来最小。就有递推式: m[v ][p ]=min{ m[i...
阅读全文
摘要:http://chjzhacm.blog.163.com/blog/static/1749014132011613105450310/这个博客中思路转换是对的,但是后面求解最长回文子串的方法我不确定对不对,自己的解法在http://www.cnblogs.com/juandx/p/4070338.h...
阅读全文
摘要:o(n^2)的解法大家应该都能想到,就是每次以i为中心去两端扩散去找就行了,下面学习传说中的Manacher解法 o(n)http://blog.163.com/zhaohai_1988/blog/static/2095100852012716105847112/void pk(){ int ...
阅读全文
摘要:用visit数组记录出现过的地方 dp的时候注意一个问题就可以: abcdacbd来看看如果遇到重复的该怎么处理: 遇到第二个a前都没有问题,第二次遇到a,然后肯定是更新a的位置的dp[4] = 4-0 = 4, 第二次遇到c, 更新c的位置为dp[5] = 5-2 = 3; 然后问题来了,第二次遇
阅读全文
摘要:先有一个概念:部分和:ps[i][j]表示从(0,0)到(i,j)这个矩形的和,那么有ps[i][j] = ps[i-1][j]+ps[i][j-1]-ps[i-1][j-1]+a[i][j],从而可以在o(m*n)的时间内求出ps这样有了ps后,就可以在o(1)时间内求出(i,j)到(p,q)这个...
阅读全文
摘要:要知道,最大和最小是相对的,用总和减去最小的就能得到最大的。 编程之美的题目没看懂,然后参考了http://zhangpeizhen.blog.163.com/blog/static/231873112201431784024921/两种情况1、普通数组,可以o(n)求最大子串和。2、如果是环状...
阅读全文
摘要:[-2,2,3,-1]的最大字段和是[2,3]/*动态规划算法:**b[j]=max{a[i]+ +a[j]},10时b[j]=b[j-1]+a[j],否则b[j]=a[j]。故b[j]的动态规划递归式为:**b[j]=max(b[j-1]+a[j],a[j]),10) b+=...
阅读全文
摘要:n^2的解法对于a[i]来说,j in 0..i-1,如果a[i]>a[j],则dp[i] = dp[j]+1,否则dp[i]至少为1For i in 0..n For j in 0..i-1 If(a[i] > a[j]) dp[i] = max(dp[i],dp[j]+1); dp[i...
阅读全文