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