[luogu CF10D] LCIS(최장 공통 상승 하위 시퀀스)

제목


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); }

좋은 웹페이지 즐겨찾기