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

hdu2476 区间dp

时间:2014-08-21 13:18:54      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   for   ar   

bubuko.com,布布扣
 1 //Accepted    300 KB    31 ms
 2 //区间dp 思路完全网上看的
 3 #include <cstdio>
 4 #include <cstring>
 5 #include <iostream>
 6 using namespace std;
 7 const int imax_n = 105;
 8 int dp[imax_n][imax_n];
 9 char s1[imax_n],s2[imax_n];
10 int ans[imax_n];
11 int n;
12 int min(int a,int b)
13 {
14     return a<b?a:b;
15 }
16 void Dp()
17 {
18     memset(dp,0,sizeof(dp));
19     for (int i=1;i<=n;i++)
20     dp[i][i]=1;
21     dp[0][0]=0;
22     for (int i=1;i<n;i++)
23     {
24         if (s2[i-1]==s2[i])
25         dp[i][i+1]=1;
26         else
27         dp[i][i+1]=2;
28     }
29     for (int l=3;l<=n;l++)
30     {
31         for (int i=1;i<=n;i++)
32         {
33             int j=i+l-1;
34             if (j>n) break;
35             dp[i][j]=dp[i+1][j]+1;
36             for (int k=i+1;k<=j;k++)
37             if (s2[i-1]==s2[k-1])
38             dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k+1][j]);
39         }
40     }
41 }
42 int main()
43 {
44     while (scanf("%s%s",s1,s2)!=EOF)
45     {
46         n=strlen(s1);
47         Dp();
48         ans[0]=0;
49         for (int i=1;i<=n;i++)
50         {
51             ans[i]=dp[1][i];
52             if (s1[i-1]==s2[i-1])
53             ans[i]=ans[i-1];
54             for (int k=0;k<i;k++)
55             ans[i]=min(ans[i],ans[k]+dp[k+1][i]);
56         }
57         printf("%d\n",ans[n]);
58     }
59     return 0;
60 }
View Code
bubuko.com,布布扣
 1 //Accepted    300 KB    15 ms
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <iostream>
 5 using namespace std;
 6 const int imax_n = 105;
 7 int dp[imax_n][imax_n];
 8 char s1[imax_n],s2[imax_n];
 9 int ans[imax_n];
10 int n;
11 int min(int a,int b)
12 {
13     return a<b?a:b;
14 }
15 void Dp()
16 {
17     //memset(dp,0,sizeof(dp));
18     for (int i=1;i<=n;i++)
19     dp[i][i]=1;
20     dp[0][0]=0;
21     for (int i=1;i<n;i++)
22     {
23         if (s2[i-1]==s2[i])
24         dp[i][i+1]=1;
25         else
26         dp[i][i+1]=2;
27     }
28     for (int l=3;l<=n;l++)
29     {
30         for (int i=1;i<=n;i++)
31         {
32             int j=i+l-1;
33             if (j>n) break;
34             if (s2[i-1]==s2[j-1])
35             dp[i][j]=dp[i+1][j];
36             else
37             dp[i][j]=dp[i+1][j]+1;
38             for (int k=i+1;k<j;k++)
39             if (s2[i-1]==s2[k-1])
40             dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k+1][j]);
41         }
42     }
43 }
44 int main()
45 {
46     while (scanf("%s%s",s1,s2)!=EOF)
47     {
48         n=strlen(s1);
49         Dp();
50         ans[0]=0;
51         for (int i=1;i<=n;i++)
52         {
53             ans[i]=dp[1][i];
54             if (s1[i-1]==s2[i-1])
55             ans[i]=ans[i-1];
56             for (int k=0;k<i;k++)
57             ans[i]=min(ans[i],ans[k]+dp[k+1][i]);
58         }
59         printf("%d\n",ans[n]);
60     }
61     return 0;
62 }
View Code

 

hdu2476 区间dp,布布扣,bubuko.com

hdu2476 区间dp

标签:style   blog   http   color   os   io   for   ar   

原文地址:http://www.cnblogs.com/djingjing/p/3926862.html

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