zoukankan      html  css  js  c++  java
  • POJ 2250

    DP题目 求LCS

    主要是要保存打印路径

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <string.h>
     4 #include <cstring>
     5 using namespace std;
     6 char s1[105][35],s2[105][35],s[105][35];
     7 int mark[105][105],dp[105][105],cnt;
     8 int l1,l2;
     9 void LCS(){
    10     memset(mark,0,sizeof(mark));
    11     memset(dp,0,sizeof(dp));
    12     for(int i=0;i<=l1;i++){
    13         mark[i][0]=1;
    14     }
    15     for(int i=0;i<=l2;i++){
    16         mark[0][i]=-1;
    17     }
    18     for(int i=0;i<l1;i++){
    19         for(int j=0;j<l2;j++){
    20             if(!strcmp(s1[i],s2[j])){
    21                 dp[i+1][j+1]=dp[i][j]+1;      
    22                 mark[i+1][j+1]=0;          //0向左上找
    23             }
    24             else if(dp[i][j+1]>=dp[i+1][j]){
    25                 dp[i+1][j+1]=dp[i][j+1];
    26                 mark[i+1][j+1]=1;           //1向上找
    27             }
    28             else {
    29                 dp[i+1][j+1]=dp[i+1][j];
    30                 mark[i+1][j+1]=-1;      //-1向左找
    31             }
    32         }
    33     }
    34 }
    35 void gets(int i,int j){          //递归从右下递归到左上
    36     if(!i&&!j)return ;
    37     if(mark[i][j]==0)
    38     {
    39         gets(i-1,j-1);
    40         strcpy(s[cnt++],s1[i-1]);
    41     }
    42     else if(mark[i][j]==1)
    43     {
    44         gets(i-1,j);
    45     }
    46     else
    47     {
    48         gets(i,j-1);
    49     }
    50 }
    51 int main(){
    52     //freopen("test.txt","r",stdin);
    53     while(~scanf("%s",s1[0])){
    54         int i;
    55         for(i=1;i<101;i++){
    56             scanf("%s ",s1[i]);
    57             if(!strcmp(s1[i],"#"))break;
    58         }
    59         l1=i;
    60         for(i=0;i<101;i++){
    61             scanf("%s",s2[i]);
    62             if(!strcmp(s2[i],"#"))break;
    63         }
    64         l2=i;
    65         LCS();
    66         cnt = 0;
    67         gets(l1,l2);
    68         printf("%s",s[0]);
    69         for(i = 1; i<cnt; i++)
    70         {
    71             printf(" %s",s[i]);
    72         }
    73         printf("
    ");
    74     }
    75     return 0;
    76 }
  • 相关阅读:
    [css] BFC规则以及解决方法
    [css] 利用border制作三角型
    初学java注解编程 记录错误及解决办法
    springmvc 注解 配置文件解释
    log4net详解(转载)
    数据库的隔离级别
    Arcgis 几何网络分析
    Spring配置文件详解 – applicationContext.xml文件路径
    wpf 线程
    wpf 保存控件中的内容为图片格式
  • 原文地址:https://www.cnblogs.com/Mr-Xu-JH/p/3885150.html
Copyright © 2011-2022 走看看