动态规划
文章平均质量分 66
stq1206
这个作者很懒,什么都没留下…
展开
-
poj1260 —— 最少的钱买完所需珍珠
c表示有多少种珍珠 ai 表示第i种珍珠所需的数量 pi 表示第i种珍珠的价钱 每买一种珍珠都需要付额外的10 * pi的钱,便宜的珍珠可以用贵的珍珠来代替,求最少的钱的总数。 简单动态规划 dp[i] 表示买完第i种珍珠之后,所花费的最少的代价,j从0到i,从j+1开始,全部由第i种代替所需的价钱+前j种所需的价钱的最小值 dp[i] = min(dp[j] + (a[j+1原创 2013-03-25 10:41:03 · 720 阅读 · 0 评论 -
poj1159 —— 一个字符串,求最少插入几个字符可以组成回文
一个字符串,求最少插入几个字符可以组成回文。 典型动态规划:求该字符串和其逆字符串的最长公共子序列,用长度减去最长公共子序列长度即可。 wa一次:runtime error:开了一个int 5000*5000的数组(100M),超了内存64M的限制,开成short(50M)即可。 #include using namespace std; short c[5001][5001];原创 2013-03-25 09:22:25 · 1218 阅读 · 0 评论 -
poj2533 —— 求最长不降子序列
简单动态规划,求最长升序列。 dp[i] 表示从1到i的最长升序列长度。遍历1到i-1,如果a[i] > a[j] ,dp[i] = dp[j] + 1的最大值。 即dp[i] = max{dp[j] + 1,if(a[i] > a[j]),1 求出从1到n 的dp[i],取最大值即为结果。 #include using namespace std; int main() { in原创 2013-03-25 09:38:45 · 511 阅读 · 1 评论