hdu1423 Greatest Common Increasing Subsequence(最长递增公共子序列)
来源:互联网 发布:u盘怎么安装mac系统 编辑:程序博客网 时间:2024/05/22 02:44
LCIS其实就是LCS的一个变种。
把a[i]作为被匹配串(代表n行),b[i]作为匹配串(代表n列),则要想成为递增匹配,每行的关系必须满足升序。这样DP时只需要比较上下的关系即可。从而DP到每一列的底部,找出最大匹配数即可。
下面是LCS的直接改进:
#include <stdio.h>#include <cstring>#include <algorithm>using namespace std;const int N = 505;int main(){ // freopen("in.txt", "r", stdin); int t, i, j, n, m, Max, flag = 0; int dp[N][N]; int a[N], b[N]; scanf("%d", &t); while(t --) { if(flag) printf("\n"); flag = 1; scanf("%d", &n); for(i = 1; i <= n; i ++) scanf("%d", &a[i]); scanf("%d", &m); for(i = 1; i <= m; i ++) scanf("%d", &b[i]); 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(b[j] < a[i]) Max = max(Max, dp[i - 1][j]); if(a[i] == b[j]) dp[i][j] = Max + 1; } } for(i = 1; i <= m; i ++) Max = max(Max, dp[n][i]); printf("%d\n", Max); } return 0;}由于只比较上下关系,所以可以优化为一位dp数组,但出于理解,本人还是更建议二维数组。
优化代码:
#include <stdio.h>#include <cstring>#include <algorithm>using namespace std;const int N = 505;int main(){ // freopen("in.txt", "r", stdin); int t, i, j, n, m, Max, flag = 0; int dp[N]; int a[N], b[N]; scanf("%d", &t); while(t --) { if(flag) printf("\n"); flag = 1; scanf("%d", &n); for(i = 1; i <= n; i ++) scanf("%d", &a[i]); scanf("%d", &m); for(i = 1; i <= m; i ++) scanf("%d", &b[i]); memset(dp, 0, sizeof(dp)); for(i = 1; i <= n; i ++) { Max = 0; for(j = 1; j <= m; j ++) { if(b[j] < a[i]) Max = max(Max, dp[j]); if(a[i] == b[j]) dp[j] = Max + 1; } } for(i = 1; i <= m; i ++) Max = max(Max, dp[i]); printf("%d\n", Max); } return 0;}
0 0
- Greatest Common Increasing Subsequence hdu1423 最长公共递增子序列
- Greatest Common Increasing Subsequence(最长单调递增公共子序列+hdu1423)
- hdu1423 Greatest Common Increasing Subsequence(最长递增公共子序列)
- HDU1423 Greatest Common Increasing Subsequence(最长公共递增子序列)
- hdu1423---Greatest Common Increasing Subsequence(最长公共上升子序列)
- HDU1423&ZOJ2432 - Greatest Common Increasing Subsequence(LCIS最长公共上升子序列模板)
- 最长公共上升子序列——hdu1423 Greatest Common Increasing Subsequence
- poj 2127 Greatest Common Increasing Subsequence (最长公共递增子序列)
- hdu 1423 Greatest Common Increasing Subsequence(最长公共递增子序列lcis)
- 最长单调递增公共子序列(路径记录+poj2127+zoj2432)Greatest Common Increasing Subsequence
- HDU 1423 Greatest Common Increasing Subsequence 最长公共递增序列
- hdu1423Greatest Common Increasing Subsequence(最长公共递增子序列)
- hdu 1423 Greatest Common Increasing Subsequence(最长公共递增子序列LICS)
- Greatest Common Increasing Subsequence-最长公共上升子序列
- HDU 1423 Greatest Common Increasing Subsequence(单调递增公共子序列)
- HDU 1423 Greatest Common Increasing Subsequence(最长公共上升子序列)
- hdu 1423 Greatest Common Increasing Subsequence(最长公共上升子序列、LCIS)
- zoj 2432 Greatest Common Increasing Subsequence(最长公共上升子序列)
- Windows - win10专业版激活方法
- 为什么 jsp页面string cannot be resolved to a type错误
- JAVA集合类总结
- 允许ubuntu下mysql远程连接
- less初学1:是什么?怎么用?
- hdu1423 Greatest Common Increasing Subsequence(最长递增公共子序列)
- NYOJ 题目19 擅长排列的小明(dfs)
- CSS sprite注意事项
- ubuntu apt-get用法
- tomcat 在eclipse无法正常访问
- javascript Function类型
- Markdown解析器不同引起的html转换问题
- Dijkstra算法
- Java并发读取List2