1 solutions
-
0
【算法分析】
状态表示:f[l][r] 表示l到r构成的回文子序列
状态计算:
1.s[l]==s[r]
2.l不选
3.r不选
4.l和r都不选
【代码实现】
#include<bits/stdc++.h> using namespace std; const int N=1010; char s[N]; int f[N][N]; //f[l][r]表示l到r这段构成的最长回文子序列 int main() { cin>>s; int n=strlen(s); for(int len=1;len<=n;len++) { for(int l=0;l+len-1<n;l++) { int r=l+len-1; if(len==1) f[l][r]=1; else { if(s[l]==s[r]) f[l][r]=f[l+1][r-1]+2; //可以构成回文 f[l][r]=max(f[l][r],max(f[l][r-1],f[l+1][r])); // 不选右边 不选左边 } } } cout<<n-f[0][n-1]; return 0; }
- 1
Information
- ID
- 1440
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 7
- Tags
- (None)
- # Submissions
- 17
- Accepted
- 9
- Uploaded By