最长公共递增子序列【模板】

来源:互联网 发布:小型气动编程压力机 编辑:程序博客网 时间:2024/05/17 23:48

虽然很多人说记模板提升空间有限,但是对于我这种菜鸟级别的人来说。能做的也只有记记模板了!

希望这个模板能帮到你,如果有更好的模板记得告诉我哦!!谢谢。

二维代码:

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int n,m,a[505],b[505],dp[505][505];int LICS(){int max,i,j;memset(dp,0,sizeof(dp));for(i=1;i<=n;i++){max=0;for(j=1;j<=m;j++){dp[i][j]=dp[i-1][j];if(a[i]>b[j]&&max<dp[i-1][j])max=dp[i-1][j];if(a[i]==b[j])dp[i][j]=max+1;}}max=0;for(i=1;i<=m;i++){if(max<dp[n][i])max=dp[n][j];}return max;}
一维代码:

#include <stdio.h>  #include <string.h>  #include <algorithm>  using namespace std;    int a[505],b[505],dp[505],n,m;    int LICS()  {      int i,j,MAX;      memset(dp,0,sizeof(dp));      for(i = 1; i<=n; i++)      {          MAX = 0;          for(j = 1; j<=m; j++)          {              if(a[i]>b[j] && MAX<dp[j])                  MAX = dp[j];              if(a[i]==b[j])                  dp[j] = MAX+1;          }      }      MAX = 0;      for(i = 1; i<=m; i++)          if(MAX<dp[i])              MAX = dp[i];      return MAX;  }  



0 0