Part one:
由于本人的的dp水平实在是太水了,所以我准备在这开一个dp的练习回顾,将以后遇到的dp题全都写入这一章中
题意:
求最长公共递增子序列
题解:
理解dp的定义,找到一个状态把他优化成最优再找下一个状态
AC代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll dp[1005];
ll a[1005];
ll lis(ll n)
{
for(ll i=0;i<n;i++)
{
dp[i]=1;
for(ll j=0;j<i;j++)
{
if(a[j]<a[i])
dp[i]=max(dp[i],dp[j]+1);
}
}
ll maxx=0;
for(ll i=0;i<n;i++)
{
if(maxx<dp[i])
maxx=dp[i];
}
return maxx;
}
int main()
{
ll n;
while(~scanf("%lld",&n))
{
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
printf("%lld\n",lis(n));
}
}