[luogu CF10D] LCIS(최장 공통 상승 하위 시퀀스)
2074 단어 [시퀀스] LIS/LCS동적 계획(/선형 DP)
제목
https://www.luogu.org/problemnew/show/CF10D
결제 사고방식
이 문제와tyvj1071의 유일한 차이점은 다음과 같다.여러 그룹의 데이터가 있습니다. 2.반복 출력 시나리오 필요
어떻게 수출 방안을 귀속합니까?t[i][j]t[i][j]로 매번 값을 저장할 수 있습니다. t[i][j]=val//t[i−1][j]t[i][j]=v a l//t[i−1][j]
코드
#include
#include
#define rep(i,x,y) for (register int i=x;i<=y;i++)
using namespace std;
int n,m,q,a[4001],b[4001],f[4001][4001],t[4001][4001];
void prin(int q)
{if (!q) return; prin(t[n][q]); printf("%d ",b[q]);}
int main()
{
scanf("%d",&n);
rep(i,1,n) scanf("%d",&a[i]);
scanf("%d",&m);
rep(i,1,m) scanf("%d",&b[i]);
rep(i,1,n)
{
int val=0;
rep(j,1,m){
f[i][j]=f[i-1][j]; t[i][j]=t[i-1][j];
if (a[i]==b[j]&&f[i-1][val]+1>f[i][j]) f[i][j]=f[i-1][val]+1,t[i][j]=val;
if (b[j]f[i-1][val]) val=j;
}
}
rep(i,1,m) if (f[n][i]>f[n][q]) q=i;
printf("%d
",f[n][q]);
prin(q);
}