• 最长公共子序列解题报告


    if(x[i]==y[j])    f[i][j]=f[i-1][j-1]+1;
    else if(x[i]!=y[j])    f[i][j]=max(f[i-1][j], f[i][j-1]);
    原决策

    这一块其实
    动规方程是

    f[i][j]=max(f[i-1][j-1]+(x[i]==y[j]), f[i][j-1], f[i-1][j]);
    动规方程

    可以联系到射箭一题

     1 #include <stdio.h>
     2 #define maxn 501
     3 int x[maxn], y[maxn], f[maxn][maxn];
     4 int max(int a, int b)
     5 {
     6     if(a>b)    return a;
     7     return b;
     8 }
     9 int main()
    10 {
    11     int i, j, lx, ly;
    12     scanf("%d%d", &lx, &ly);
    13     for(i=1; i<=lx; i++)    scanf("%d", &x[i]);
    14     for(i=1; i<=ly; i++)    scanf("%d", &y[i]);
    15     for(i=1; i<=lx; i++)
    16         for(j=1; j<=ly; j++)
    17         {
    18             if(x[i]==y[j])    f[i][j]=f[i-1][j-1]+1;
    19             else if(x[i]!=y[j])    f[i][j]=max(f[i-1][j], f[i][j-1]);
    20             //可以变成一句
    21             //f[i][j]=max(f[i-1][j-1]+(x[i]==y[j]), f[i][j-1], f[i-1][j]);
    22         }
    23     printf("%d", f[lx][ly]);
    24     return 0;
    25 }
    完整代码
  • 相关阅读:
    数据库ACID
    tcp ip detatils
    process vs thread
    C++ virtual descructor
    static_cast dynamic_cast const_cast reinterpret_cast总结对比
    Meta Programming
    C++ traits
    c++内存管理
    洛谷 P4136 谁能赢呢?
    洛谷 P1166 打保龄球
  • 原文地址:https://www.cnblogs.com/formiko/p/4418209.html
Copyright © 2020-2023  润新知