NYOJ17 最长单调递增子序列 线性dp

时间:2023-03-10 01:41:41
NYOJ17 最长单调递增子序列 线性dp

题目链接:

http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=17

分析:

i=1

dp[i]=1

i!=1

dp[i]=max(dp[j]+1)  j<i&&a[j]<a[i]

代码如下:

#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
getchar();
while(n--)
{
char a[];
gets(a);
int l=strlen(a);
int dp[l];
dp[]=;
for(int i=;i<l;i++)
{
int t=;
for(int j=;j<i;j++)
{
if(a[j]<a[i])
{
if(t<dp[j])
{
t=dp[j];
}
}
}
dp[i]=t+;
}
int t=dp[];
for(int i=;i<l;i++)
{
if(t<dp[i])
{
t=dp[i];
}
}
printf("%d\n",t);
}
return ;
}