您的位置:首页 > 其它

LA 4394

2014-07-17 13:16 155 查看
Description

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>

using namespace std;

#define read() freopen("sw.in", "r", stdin)

const int MAX = 105;
char a[MAX], b[MAX];
int dp[MAX][MAX];
int f[MAX];

void solve() {
int n = strlen(a);
for (int len = 1; len <= n; ++len) {
for (int l = 0; l + len - 1 < n; ++l) {
int r = l + len - 1;
dp[l][r] = len;
if (l == r) {
dp[l][r] = 1;
continue;
}
for (int k = l; k <= r; ++k) {
if (k + 1 > r) continue;
dp[l][r] = min(dp[l][r], dp[l][k] + dp[k + 1][r]);
}
if (b[l] == b[r]) dp[l][r] = min(dp[l][r - 1], dp[l][r]);
//printf("l = %d r = %d %d\n", l, r, dp[l][r]);
}
}

for (int i = 0; i < n; ++i) {
f[i + 1] = dp[0][i];
if (a[i] == b[i]) f[i + 1] = min(f[i + 1], f[i]);
for (int j = 0; j < i; ++j) {
if (j + 1 > i) continue;
f[i + 1] = min(f[i + 1], f[j + 1] + dp[j + 1][i]);
}
}

//for (int i = 0; i < n; ++i) printf("%d ", f[i]);
printf("%d\n", f
);

}

int main()
{

int t;
//read();
while (scanf("%s%s", a, b) != EOF) {
solve();
}
//cout << "Hello world!" << endl;
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: