子序列问题【LIS、LCS、LCIS】
#include<stdio.h>
#include<algorithm>
using namespace std;
int n,m,a[1010],b[1010],f[1010][1010];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;++i) {
scanf("%d",&a[i]);
}
scanf("%d",&m);
for(int i=1;i<=m;++i) {
scanf("%d",&b[i]);
}
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j)
{
if(a[i]==b[j]) {
for(int k=0;k<j;++k) {
if(a[i]>b[k] && f[i-1][k]+1>f[i][j]) {
f[i][j]=f[i-1][k]+1;
}
}
}
else f[i][j]=f[i-1][j];
}
}
printf("%d",f[n][m]);
return 0;
}
/*
5
1 4 2 5 -12
4
-12 1 2 4
*/
从0到1很难,但从1到100很容易