hdu2476 string painter 区间dp

来源:互联网 发布:vi设计软件下载 编辑:程序博客网 时间:2024/05/18 00:55

(坑)

#include <cstdio>#include <cstring>#include <algorithm>#define N 105#define inf 0x7fffffffusing namespace std;int dp[N][N],ans[N];char a[N],b[N];int n;int main(){    while(~scanf("%s%s", a + 1, b + 1)){        n = strlen(a + 1);        for(int i = 1; i <= n; i++)            for(int j = 1; j <= n; j++)                if(i <= j)                    dp[i][j] = inf;        memset(ans, 127, sizeof(ans));        for(int i = 1; i <= n; i++)            dp[i][i] = 1;        for(int l = 2; l <= n; l++)            for(int i = 1; i + l - 1<= n; i++){                int j = i + l - 1;                dp[i][j] = dp[i + 1][j] + 1;                for(int k = i + 1; k <= j; k++)                    if(b[i] == b[k])                        dp[i][j] = min(dp[i][j], dp[i + 1][k] + dp[k + 1][j]);            }        ans[0] = 0;        for(int i = 1; i <= n; i++){            if(a[i] == b[i])                ans[i] = ans[i - 1];            else                for(int j = 0; j < i; j++)                    ans[i] = min(ans[i], ans[j] + dp[j + 1][i]);        }        printf("%d\n", ans[n]);    }    return 0;}
原创粉丝点击