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

hdu 2476 String Painter

时间:2016-05-19 00:02:56      阅读:312      评论:0      收藏:0      [点我收藏+]

标签:

第一道区间dp题,感觉题意不是很好理解

题意:一次可以转换某一个位置的字符,或是一串连续的字符,举第一个例子zzzzzfzzzzz

1:aaaaaaaaaaa

2: abbbbbbbbba

3: abcccccccba

4: abcdddddcba

5: abcdeeedcba

6: abcdefedcba

于是第一个例子输出6,第二个同理

话不多说,直接贴一波代码

 1 #include<iostream>  
 2 #include<cstdio>  
 3 #include<cstring> 
 4 #include <cmath> 
 5 #include<stack>
 6 #include<vector>
 7 #include<map> 
 8 #include<set>
 9 #include<queue> 
10 #include<algorithm>  
11 using namespace std;
12 
13 int dp[1005][1005];
14 int ans[1005];
15 
16 int main()
17 {
18     string str1,str2;
19     int len;
20     while(cin>>str1>>str2)
21     {
22         len=str1.length();
23         for(int j=0;j<len;j++)
24         {
25             for(int i=j;i>=0;i--)
26             {
27                 dp[i][j]=dp[i+1][j]+1;
28                 for(int k=i+1;k<=j;k++)
29                 {
30                     if(str2[i]==str2[k])
31                         dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k+1][j]);
32                 }    
33             }
34         }
35         for(int i=0;i<len;i++)
36             ans[i]=dp[0][i];
37         for(int i=0;i<len;i++)
38         {
39             if(str1[i]==str2[i])
40                 ans[i]=ans[i-1];
41             else
42             {
43                 for(int j=0;j<i;j++)
44                     ans[i]=min(ans[i],ans[j]+dp[j+1][i]);
45         
46             }            
47         }
48         printf("%d\n",ans[len-1]);    
49     }
50     return 0;
51  } 

 

hdu 2476 String Painter

标签:

原文地址:http://www.cnblogs.com/pter/p/5506787.html

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