1. 程式人生 > >迴文串最少劃分數

迴文串最少劃分數

這個是正向分析字串,覺得比較好理解.
這個問題以後還要補充……

#pragma warning(disable:4996)  
#include <iostream>  
#include <algorithm>  
#include <cmath>  
#include <vector>  
#include <string>  
#include <cstring>  
using namespace std;

int len;
char s[5005];
char s1[5005];
int dp[5005];
int
v[5005][5005]; void input() { scanf("%s", s1); len = strlen(s1); strcpy(s + 1, s1); } void solve() { int i, j; for (i = 0; i <= len; i++) { v[i][i] = 1; } for (i = 1; i <= len; i++) { dp[i] = i; for (j = i; j >= 1; j--) { if
(i == j) { dp[i] = min(dp[i], dp[i - 1] + 1); } else if (i - j == 1 && s[i] == s[j]) { v[j][i] = 1; dp[i] = min(dp[i], dp[j-1] + 1); } else if (v[j + 1][i - 1]&&s[i]==s[j]) { v[j][i] = 1
; dp[i] = min(dp[i], dp[j-1] + 1); } } } printf("%d", dp[len]); } int main() { //freopen("i.txt", "r", stdin); //freopen("o.txt", "w", stdout); input(); solve(); //system("pause"); return 0; }