hdu 2476 String Painter

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 2476 String Painter相关的知识,希望对你有一定的参考价值。

第一道区间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的主要内容,如果未能解决你的问题,请参考以下文章

HDU 2476 String painter (区间DP)

HDU 2476 String painter

hdu2476String painter (区间DP)

HDU 2476 String painter(区间dp)

HDU 2476 String painter

hdu 2476 String painter(区间dp)