POJ1159 - Palindrome(区间DP)
2013-08-13 21:37
489 查看
题目大意
给定一个字符串S,问最少插入多少个字符可以使字符串S变为回文串题解
用dp[i][j]表示把字符串s[i…j]变为回文串需要插入的最小字符数如果s[i]==s[j]那么dp[i][j]=dp[i+1][j-1]
如果s[i]!=s[j]那么dp[i][j]=min(dp[i+1][j],dp[i][j-1])+1
可以用滚动数组优化一下空间
代码:
#include<cstdio> #include<algorithm> #include<cstring> using namespace std; #define MAXN 5005 char s[MAXN]; short int dp[2][MAXN]; int main() { int n; scanf("%d%s",&n,s); for(int i=n-1; i>=0; i--) for(int j=i; j<n; j++) if(s[i]==s[j]) dp[i&1][j]=dp[(i+1)&1][j-1]; else dp[i&1][j]=min(dp[(i+1)&1][j],dp[i&1][j-1])+1; printf("%d\n",dp[0][n-1]); return 0; }
相关文章推荐
- POJ 1159 Palindrome(区间DP/最长公共子序列+滚动数组)
- 区间DP基础篇之 POJ1159——Palindrome
- POJ 1159 Palindrome(区间DP/最长公共子序列+滚动数组)
- POJ 1159 Palindrome(区间dp)
- POJ1159 Palindrome 简单的DP
- poj1159——Palindrome(组成回文串的最少字符数,dp)
- POJ---1159-Palindrome(01DP)
- POJ1159 Palindrome(滚动数组DP)
- POJ1159——Palindrome——DP+滚动数组(节省空间)
- POJ1159_Palindrome_DP
- poj - 1159 - Palindrome(滚动数组dp)
- POJ_1159_Palindrome【dp】
- poj 1159 Palindrome(dp+滚动数组)
- POJ-3280 Cheapest Palindrome 区间DP
- POJ 1159-Palindrome(dp_回文串+滚动数组)
- poj 1159 Palindrome(lcs类似dp)
- POJ 1159 Palindrome (滚动数组 DP)
- Cheapest Palindrome POJ - 3280 (区间DP)
- POJ - 1159 Palindrome(dp-回文变形)
- poj 1159 Palindrome (反串LCS 与 DP两种方法)