码迷,mamicode.com
首页 > 其他好文 > 详细

UVa1437 String painter

时间:2018-07-04 13:26:44      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:strlen   tar   ...   本质   size   相同   ios   .net   https   

emmm...好难的一道dp

其实本质是两次dp.第一次求出都不相等时候的最优解, 第二次在求出两串有相同时的更优的解.

https://blog.csdn.net/hndu__lz/article/details/52167981

这位讲的不错, 可以去看看.

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <algorithm>
 5 using namespace std;
 6 const int MAXN = 1e2 + 20;
 7 
 8 char s[MAXN], t[MAXN];
 9 int f[MAXN][MAXN], g[MAXN];
10 int N;
11 
12 int main()
13 {
14     while(scanf("%s\n%s", s, t) == 2)
15     {
16         N = strlen(s);
17         for(int i = 0; i < N; i++) f[i][i] = 1;
18             
19         for(int len = 1; len < N; len++)
20             for(int l = 0; l + len < N; l++){
21                 int r = l + len;
22                 f[l][r] = f[l + 1][r] + 1;
23                 
24                 for(int k = l + 1; k <= r; k++)
25                     if(t[l] == t[k]) f[l][r] = min(f[l][r], f[l + 1][k] + f[k + 1][r]);
26             }
27             
28         for(int r = 0; r < N; r++)
29         {
30             g[r] = f[0][r];
31             if(s[r] == t[r]) g[r] = (r == 0) ? 0 : g[r - 1];
32             else 
33                 for(int l = 0; l < r; l++) g[r] = min(g[r], g[l] + f[l + 1][r]);
34         }
35         cout<<g[N - 1]<<endl;
36     }
37     return 0;
38 }

 

UVa1437 String painter

标签:strlen   tar   ...   本质   size   相同   ios   .net   https   

原文地址:https://www.cnblogs.com/wsmrxc/p/9262626.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!