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

 

二维

 

 1 #include <stdio.h>
 2 #include <algorithm>
 3 #include <string.h>
 4 using namespace std;
 5 
 6 int n,m,a[505],b[505],dp[505][505];
 7 
 8 int LICS()
 9 {
10     int MAX,i,j;
11     memset(dp,0,sizeof(dp));
12     for(i = 1; i<=n; i++)
13     {
14         MAX = 0;
15         for(j = 1; j<=m; j++)
16         {
17             dp[i][j] = dp[i-1][j];
18             if(a[i]>b[j] && MAX<dp[i-1][j])
19                 MAX = dp[i-1][j];
20             if(a[i]==b[j])
21                 dp[i][j] = MAX+1;
22         }
23     }
24     MAX = 0;
25     for(i = 1; i<=m; i++)
26         if(MAX<dp[n][i])
27             MAX = dp[n][i];
28     return MAX;
29 }

 

 

 

优化成一维

 

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <algorithm>
 4 using namespace std;
 5 
 6 int a[505],b[505],dp[505],n,m;
 7 
 8 int LICS()
 9 {
10     int i,j,MAX;
11     memset(dp,0,sizeof(dp));
12     for(i = 1; i<=n; i++)
13     {
14         MAX = 0;
15         for(j = 1; j<=m; j++)
16         {
17             if(a[i]>b[j] && MAX<dp[j])
18                 MAX = dp[j];
19             if(a[i]==b[j])
20                 dp[j] = MAX+1;
21         }
22     }
23     MAX = 0;
24     for(i = 1; i<=m; i++)
25         if(MAX<dp[i])
26             MAX = dp[i];
27     return MAX;
28 }

 

相关文章:

  • 2022-12-23
  • 2021-07-30
  • 2022-01-05
  • 2022-12-23
  • 2021-09-03
  • 2022-12-23
  • 2022-12-23
  • 2022-01-01
猜你喜欢
  • 2022-12-23
  • 2021-10-19
  • 2022-01-19
  • 2022-12-23
  • 2021-10-05
  • 2021-06-12
  • 2022-02-18
相关资源
相似解决方案