poj 1159 Palindrome 【DP】
2012-01-31 17:19
330 查看
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,(s[i]!=s[j])DP+Short数组:
Problem: 1159 User: wxfwxf328 Memory: 40716K Time: 391MS Language: C++ Result: Accepted Source Code #include<iostream> using namespace std; short dp[5001][5001]; char s[5001]; int main() { int i,j,n; cin.sync_with_stdio(false); cin>>n>>s; for(i=n-2;i>=0;i--) for(j=i+1;j<n;j++) if(s[i]==s[j]) dp[i][j]=dp[i+1][j-1]; else dp[i][j]=min(dp[i+1][j],dp[i][j-1])+1; cout<<dp[0][n-1]<<endl; return 0; }DP+滚动数组:
Problem: 1159 User: wxfwxf328 Memory: 272K Time: 407MS Language: C++ Result: Accepted Source Code #include<iostream> using namespace std; short dp[2][5001]; char s[5001]; int main() { int i,j,n; cin.sync_with_stdio(false); cin>>n>>s; for(i=n-2;i>=0;i--) for(j=i+1;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; cout<<dp[0][n-1]<<endl; return 0; }
相关文章推荐
- POJ 1159 Palindrome(区间DP/最长公共子序列+滚动数组)
- poj - 1159 - Palindrome(滚动数组dp)
- poj 1159 Palindrome(dp)
- poj 1159 Palindrome (反串LCS 与 DP两种方法)
- POJ1159 Palindrome(dp加最少字母构成回文字符串)
- POJ1159——Palindrome——DP+滚动数组(节省空间)
- POJ_1159_Palindrome【dp】
- POJ 1159 - Palindrome (DP 添加最少字符使s为回文串)
- Palindrome(POJ 1159 DP)
- POJ1159 Palindrome(dp)
- POJ1159_Palindrome_DP
- POJ 1159 Palindrome(DP)
- Poj1159 Palindrome(动态规划DP求最大公共子序列LCS)
- POJ-1159 Palindrome (dp+滚动数组节省内存)
- poj 1159 Palindrome(lcs类似dp)
- [POJ 1159]Palindrome[DP]
- 区间DP基础篇之 POJ1159——Palindrome
- POJ-1159-Palindrome -dp
- POJ1159 - Palindrome(区间DP)
- Poj1159 Palindrome(动态规划DP求最大公共子序列LCS)