AcWing 4. 多重背包问题 I
原题链接
简单
作者:
@我
,
2021-02-23 16:24:08
,
所有人可见
,
阅读 206
求最长公共子序列的路径,从后到前输出
#include<iostream>
using namespace std;
const int N = 505;
int n;
int a[N],f[N],g[N];
int main()
{
cin>>n;
for(int i = 1;i <= n;i++) cin>>a[i];
for(int i = 1;i <= n;i++)
{
f[i] = 1;
g[i] = 0;
for(int j = 1;j < i;j++)
{
if(a[j] < a[i])
{
if(f[i] < f[j]+1)
{
f[i] = f[j]+1;
g[i] = j;
}
}
}
}
int k = 1;
for(int i = 1;i <= n;i++)
if(f[k]<f[i]) k = i;
cout<<f[k]<<endl;
for(int i = 0,len = f[k];i < len;i++)
{
cout<<a[k]<<" ";
k = g[k];
}
return 0;
}