
dp
gzdrn
这个作者很懒,什么都没留下…
展开
-
POJ2533 Longest Ordered Subsequence
大家都说是最基础的dp,但是还是搞了好久才AC,dp练得还是不够多#includeint main(){ int n; while(scanf("%d",&n)!=EOF) { int a[10010]; int dp[10010]; int i,j; for(i=0;i<n;i++) scanf("%d",&a[i]); dp[0]=1; int md原创 2016-03-02 00:51:59 · 231 阅读 · 0 评论 -
POJ3186Treats for the Cows
题意给长度为n的序列,每次只能从首或尾取一个数,第i次取的数权值为(数值*i),求取完所有的数可以达到的最大权值。思路dp[i][j]表示左边取了i个数,右边取了j个数 故 dp[i][j] = max(dp[i-1][j] + a[i]* (i+j), dp[i][j-1] + a[n-j+1]*(i+j)); 注意当ij为0的边界判断即可。原创 2016-03-02 15:23:13 · 286 阅读 · 0 评论 -
区间dp模型(石子归并,括号匹配,整数划分)
区间dp顾名思义就是在一个区间上进行的一系列动态规划。对一些经典的区间dp总结在这里。1) 石子归并问题题目链接:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=737描述: 有N堆石子排成一排,每堆石子有一定的数量。现要将N堆石子并成为一堆。合并的过程只能每次将相邻的两堆石子堆成一转载 2016-03-02 15:25:04 · 254 阅读 · 0 评论 -
LCS 最大公共序列算法
1、LCS 求最大子序列, 一个办法当然是穷举法了, 但是穷举法太耗时间了O(2^m*2^n), 基本没用.2、聪明的程序员想到了,一个用矩阵来查找的算法,就是把两个队列用整形矩阵表示, 相同的为1, 不同的为0, 然后求最大对角线,优化是优化了很多, 不过求最大对角线也不省心。3、聪明的程序员再次优化了算法,就是相同的不是用1表示, 而是数字叠加,这样再找最大对角线的时候,就比较转载 2016-02-16 00:55:46 · 306 阅读 · 0 评论