动态规划
Keter_Plus
这个作者很懒,什么都没留下…
展开
-
POJ 1159 Palindrome
写这个看似简单的题目才发现自己原来毛都不会(╯‵□′)╯︵┻━┻,加上网上有很多的解析其实讲的都不准确,导致了很多理解上的错误这道题就是求字符串s和字符串的逆序串s’的最长公共“子序列”,而并非所谓的最长“子串”,一般来说两个子串一定是连续的一段字符,而子序列可以是不连续的……然后问题来了,怎么求两个子串的最长公共子序列呢,这里用的是动态规划的方法,用数组dp[i][j]来记录两个字符串长度为i和j原创 2016-01-15 20:38:44 · 227 阅读 · 0 评论 -
POJ 1050 To the Max
动态规划的思想,用到的一个最基本的方法就是求一维数组连续数字串的和的最大值,状态转移方程为sum[i] = max(sum[i-1]+a[i],a[i])在二维的情形中就是先枚举任意两行,然后对每一列在这两行之间的数字先求和,然后对求出来的数组求其一维连续数字串的最大值,得到的就是以两行为上下界的矩阵的最大值。#include <iostream>#include <cstdio>#includ原创 2016-01-15 15:52:08 · 217 阅读 · 0 评论 -
POJ 1163 The Triangle
经典的DP题目,自下而上进行,状态转移方程为 dp[i][j] = max(dp[i+1][j],dp[i+1][j+1])+data[i][j];#include <iostream>#include <cstdio>using namespace std;#define MAXN 110int main(){ int n; int data[MAXN][MAXN]={0};原创 2016-01-14 22:17:43 · 217 阅读 · 0 评论 -
POJ 1651 Multiplication Puzzle
好久不写blog了,也是因为各种各样的事情没有功夫写代码,新学期开始了继续努力~!算分课上讲了动态规划,这次拿这个题目练手,这次用数组m[i][j]存储区间i到j的最小做运算的数量,状态转移也比较简单,代码也单独拿出来作为一个函数这样看起来比较清楚。比较烦人的地方在于角标和实际数值之间的关系,倒腾了半天#include <iostream>#include <cstdio>#include <l原创 2016-03-21 17:32:09 · 230 阅读 · 0 评论