摘要: 这个问题使用动态规划求解,dp[i][j]表示字符串下标为i的字符和下标为j的字符区间内构成回文所需加入的最少的字符串。当str[i]==str[j]时,则dp[i][j]=dp[i+1][j-1],当str[i]!=str[j]时,dp[i][j]=min(dp[i+1][j]+1,dp[i][j-1]+1),初始化时候,d[i][i]=0,d[i][i+1]=1(这里真是纠结了一个多小时,我还以为我转移方程错了!!!)。输出dp[0][strlen(str)-1].#include #include #include using namespace std; char str[1001]; 阅读全文
posted @ 2013-08-07 23:49 湖心北斗 阅读(519) 评论(0) 推荐(0) 编辑
摘要: 南阳理工学院动态规划专题括号问题2总结这道题目初看起来很简单,但是我从看题到思考,到做题ac足足花了一个晚上加一个下午的时间,我也有到网上找代码的习惯,但是都是递归,特别蛋疼,我想用正统的动归去做,于是就开始了不一样的艰难探索之旅。分析过程:使用char str[1001]这个字符数组保存最初输入的括号序列,使用dp[1001][1001]这个数组保存中间结果,dp[i][j]的意思是从下标为i的字符到下标为j的字符的子问题最少要加多少个括号才能规范化。首先dp数组初始化为零,显然dp[i][i]=1;至于dp[i][i+1],当str[i][i+1]配对的时候=0,当str[i][i+1]不 阅读全文
posted @ 2013-08-07 20:31 湖心北斗 阅读(320) 评论(0) 推荐(0) 编辑