【题目描述】
【输入形式】
【输出形式】
【输入样例】
【输出样例】
- 动态规划
状态:dp[i]表示以str[i]为末尾的最长升序子串的长度。
状态转移方程:dp[i] = max(1,dp[j] + 1) - 自做答案
//2020/4/1
#include<stdio.h>
#include<string.h>
const int maxn = 10010;
char str[10010];
int dp[10010];
int main()
{
int i,j;
int len;
scanf("%s",str);
len = strlen(str);
for(i = 0;i<len;i++)
{
dp[i] = 1;
for(j = 0;j<i;j++)
{
if(str[i] >= str[j] && dp[j]+1 > dp[i])
{
dp[i] = dp[j] + 1;
}
}
}
int k = 0;
for(i = 1;i<len;i++)
{
if(dp[i] > dp[k])
k = i;
}
printf("%d\n",dp[k]);
return 0;
}
/*
IN:
abdbch
OUT:
5
*/