zoukankan      html  css  js  c++  java
  • 几个简单DP问题 虽然我不怎么不会。。

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2080

    最长公共子序列

    状态方程

    if ( ci==cj)

    dp[i][j] = dp[i-1][j-1]+1;

    else

    dp[i][j] = max{dp[i-1][j],dp[i][j-1]};

    View Code
     1 #include <iostream>
     2 #include<cstdio>
     3 #include<string.h>
     4 using namespace std;
     5 int main()
     6 {
     7     int i,j,k,n,m,dp[501][501],k1,k2;
     8     char c1[501],c2[501];
     9     while(gets(c1)!=NULL)
    10     {
    11         gets(c2);
    12         k1 = strlen(c1);
    13         k2 = strlen(c2);
    14         for(i = 0 ; i < k1 ; i++)
    15         dp[i][0] =0;
    16         for(j = 0 ;j <= k2 ; j++)
    17         dp[0][j] = 0;
    18         for(i = 1 ; i <= k1 ; i++)
    19         {
    20             for(j =1 ; j <= k2 ; j++)
    21             if(c1[i-1]==c2[j-1])
    22             dp[i][j] = dp[i-1][j-1]+1;
    23             else
    24             {
    25                 if(dp[i][j-1]<dp[i-1][j])
    26                 dp[i][j] = dp[i-1][j];
    27                 else
    28                 dp[i][j] = dp[i][j-1];
    29             }
    30         }
    31         printf("%d\n",dp[k1][k2]);
    32     }
    33     return 0;
    34 }
    最长上升子序列
    View Code
     1 #include <iostream>
     2 #include<cstdio>
     3 #include<string.h>
     4 using namespace std;
     5 int dp[1001];
     6 int main()
     7 {
     8     int i,j,k,n,m,a[1001];
     9     scanf("%d",&n);
    10     for(i = 1; i <= n ; i++)
    11     {
    12         scanf("%d",&a[i]);
    13     }
    14     dp[1] =1;
    15     int max = 1;
    16     for(i = 2; i <= n ;i++)
    17     {
    18         int tmax =1;
    19         for(j = 1; j < i ; j++)
    20         {
    21             if(a[i]>a[j]&&tmax<dp[j]+1)
    22             tmax = dp[j]+1;
    23         }
    24         dp[i] = tmax;
    25         if(dp[i]>max)
    26         max = dp[i];
    27     }
    28     printf("%d\n",max);
    29     return 0;
    30 }

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1730

    数字三角形

    dp[i][j] = max{dp[i+1][j],dp[i+1][j+1]}+a[i][j];

    View Code
     1 #include <iostream>
     2 #include<cstdio>
     3 #include<string.h>
     4 using namespace std;
     5 int main()
     6 {
     7     int i,j,k,n,dp[101][101],a[101][101];
     8     scanf("%d",&n);
     9     for(i = 1; i <= n ; i++)
    10     for(j = 1 ; j <= i ; j++)
    11     scanf("%d",&a[i][j]);
    12     for(i = 1 ; i <= n ;i++)
    13     dp[n][i] = a[n][i];
    14     for(i = n-1; i >= 1 ; i--)
    15     {
    16         for(j = 1; j <= i ; j++)
    17         if(dp[i+1][j]>dp[i+1][j+1])
    18         dp[i][j]=a[i][j]+dp[i+1][j];
    19         else
    20         dp[i][j] = a[i][j]+dp[i+1][j+1];
    21     }
    22     printf("%d\n",dp[1][1]);
    23     return 0;
    24 }

    http://acm.hdu.edu.cn/showproblem.php?pid=1003 最大序列和

    View Code
     1 #include <iostream>
     2 #include<cstdio>
     3 #include<string.h>
     4 using namespace std;
     5 int a[100001];
     6 int main()
     7 {
     8     int i,j,k = 0,n,m,t,x,y;
     9     scanf("%d",&t);
    10     while(t--)
    11     {
    12         k++;
    13         scanf("%d",&n);
    14         for(i = 1; i <= n ; i++)
    15         scanf("%d",&a[i]);
    16         int tmax = 0,max = -999,tx = 1,y = 1;
    17         for(i = 1; i <= n ; i++)
    18         {
    19             tmax+=a[i];
    20             if(tmax>max)
    21             {
    22                 max = tmax;
    23                 x = tx;
    24                 y = i;
    25             }
    26             if(tmax<0)
    27             {
    28                 tmax = 0;
    29                 tx = i+1;
    30             }
    31         }
    32         printf("Case %d:\n",k);
    33         printf("%d %d %d\n",max,x,y);
    34         if(t!=0)
    35         puts("");
    36     }
    37     return 0;
    38 }

    http://www.cnblogs.com/shangyu/archive/2012/04/12/2445021.html

  • 相关阅读:
    HTML常用标签及其属性
    初识Java
    JS中firstChild,lastChild,nodeValue属性
    前端网页进度Loading
    Git分支管理小结
    Vim文本编辑命令
    EF
    Linq
    委托(作用:解耦),lambda的演化
    单例模式
  • 原文地址:https://www.cnblogs.com/shangyu/p/2631877.html
Copyright © 2011-2022 走看看