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】
最新推荐文章于 2022-05-16 16:41:42 发布