折磨人的一道题。。。花了一天时间。题目来源:点击打开链接
题目大意:a,b数组中,找一个最大公共子序列,并且该序列是递增的
找ans不难,重点在保存序列。注意的地方在注释里。
在理解题目的时候参考了点击打开链接,解释的很清楚。
代码如下:
#include<iostream>
#include<algorithm>
#include<string.h>
#include<string>
using namespace std;
long long a[501],b[501],z[501];
int dp[501][501]={0},pre[501][501];
int main()
{
int n,m,i,ans,j,mx,locay;
cin>>m;
for (i=1;i<=m;i++)//一定要按输入例子的顺序。。。也不知道为什么,说好的任意一个序列呢!
cin>>b[i];
cin>>n;
for (i=1;i<=n;i++)
cin>>a[i];
ans=0;
for (i=1;i<=n;i++)
{
mx=0;locay=0;
for (j=1;j<=m;j++)
{
dp[i][j] = dp[i-1][j];//忘记加了!首先要保证到i、j为止的最大长度不可能