摘要: 题目大意是说一个字符串,每插入或者删除一个字符都需要一定的代价,问怎样可以使这个字符串变成一个回文串,且花费最小。首先明确的就是如果已经将区间[i,j]整理成为一个回文串(不管中间有多少个字符或者是以什么字符开头或者结尾),当DP到区间[i,j+1]时,我们可以在i-1的位置添加一个str[j+1]字符,或者将在j+1处的字符删除,得到一个新的回文串,而且我们这两步操作都没有借助或者影响区间[i,j]的情况。因此,那我们就可以将添加或者删除整合在一起,对字符str[j+1]的操作就按照添加和删除中花费最小的一个计算。写出状态转移方程: DP[j][i] = MIN(DP[j+1][i]+cos 阅读全文
posted @ 2013-08-18 17:32 再见~雨泉 阅读(2001) 评论(1) 推荐(1) 编辑
摘要: 简单DP,题解见代码 1 #include 2 #include 3 #include 4 #define mem0(a) memset(a,0,sizeof(a)) 5 #define MAX(a, b) (a > b ? a : b) 6 using namespace std; 7 8 struct BondsV_I 9 {10 int Value;11 int Interest;12 }Bonds[11];13 int Amount, Year, BondsNum;14 int dp[50005];//由于题目说利率不会超过10%,所以也就是不会超过1000*1... 阅读全文
posted @ 2013-08-18 15:36 再见~雨泉 阅读(231) 评论(0) 推荐(0) 编辑