首页 > 其他 > 详细

UVALive 4394 String painter ——(区间DP)

时间:2017-03-17 18:49:13      阅读:218      评论:0      收藏:0      [点我收藏+]

  其实这个dp过程有点似懂非懂。。。代码如下:

 1 #include <stdio.h>
 2 #include <algorithm>
 3 #include <string.h>
 4 using namespace std;
 5 const int N = 100 + 5;
 6 
 7 char a[N],b[N];
 8 int dp[N][N];
 9 int f[N];
10 
11 int main()
12 {
13     while(scanf("%s",a+1) == 1)
14     {
15         int n = strlen(a + 1);
16         scanf("%s",b+1);
17         for(int i=1;i<=n;i++) dp[i][i] = 1;
18         for(int len=2;len<=n;len++)
19         {
20             for(int i=1;i+len-1<=n;i++)
21             {
22                 int j = i + len - 1;
23                 dp[i][j] = dp[i+1][j] + (b[i] == b[i+1] ? 0 : 1);
24                 for(int k=i+1;k<=j;k++)
25                 {
26                     if(b[k] == b[i])
27                     dp[i][j] = min(dp[i][j], dp[i+1][k] + dp[k+1][j]);
28                 }
29             }
30         }
31         for(int i=1;i<=n;i++)
32         {
33             if(a[i] == b[i]) f[i] = f[i-1];
34             else
35             {
36                 f[i] = 2e9;
37                 for(int k=i;k>=1;k--)
38                 {
39                     f[i] = min(f[i], f[k-1] + dp[k][i]);
40                 }
41             }
42         }
43         printf("%d\n",f[n]);
44     }
45     return 0;
46 }

 

UVALive 4394 String painter ——(区间DP)

原文:http://www.cnblogs.com/zzyDS/p/6567569.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!