11584
題意分析:
題目比較容易理解,以d[i]表示前i個字符的最優解,狀態轉移方程 d[i]=min{d[j]+1| [j+1~i]為回文串}
代碼如下:
1 #include <cstdio>
2 #include <iostream>
3 #include <cstring>
4 #include <algorithm>
5 using namespace std;
6 const int maxs=1000;
7 int is[maxs+5][maxs+5];
8 int dp[maxs];
9 char s[maxs];
10 void pre_solve(){
11 memset(is, 0, sizeof is);
12 int len=strlen(s);
13 for(int i=0;i<len;i++){
14 int l=i;
15 int r=i;
16 while(l>=0&&r<len){
17 if(s[l]==s[r])
18 is[l][r]=1;
19 else break;
20 l--;
21 r++;
22 }
23 }
24 for(int i=0;i<len-1;i++){
25 int l=i;
26 int r=i+1;
27 while(l>=0&&r<len){
28 if(s[l]==s[r])
29 is[l][r]=1;
30 else break;
31 l--;
32 r++;
33 }
34 }
35 }
36 int main(){
37 int T;
38 scanf("%d",&T);
39 while(T--){
40 scanf("%s",s);
41 pre_solve();
42 dp[0]=0;
43 int len=strlen(s);
44 for(int i=1;i<=len;i++){
45 dp[i]=1<<30;
46 for(int j=0;j<i;j++){
47 if(is[j][i-1])
48 dp[i]=min(dp[i],dp[j]+1);
49 }
50 }
51 printf("%d
",dp[len]);
52 }
53 }
總結
- 上一篇: unity手游之聊天SDK集成与使用一
- 下一篇: 如何开启Intel HAXM功能