用C语言解决最长单调递增子序列。要求输入第一行一个整数 0<n<20, 表示有 n 个字符串要处理 随后的 n 行,每行有一个字符串,该字符串的长度不会超过 10000。要求每个字符串均要有输出结果
时间: 2024-02-25 11:56:38 浏览: 41
在前面的基础上稍加修改即可,只需要在遍历完dp数组后,输出每个字符串的最长递增子序列的长度即可。完整的代码示例如下:
```c
#include <stdio.h>
#include <string.h>
#define MAX_N 20
#define MAX_L 10000
int main()
{
int n, len[MAX_N], nums[MAX_N][MAX_L], dp[MAX_N][MAX_L];
char str[MAX_N][MAX_L];
scanf("%d", &n);
for(int i=0; i<n; i++)
{
scanf("%s", str[i]);
len[i] = strlen(str[i]);
for(int j=0; j<len[i]; j++)
nums[i][j] = str[i][j];
}
for(int i=0; i<n; i++)
{
for(int j=0; j<len[i]; j++)
{
dp[i][j] = 1;
for(int k=0; k<j; k++)
{
if(nums[i][k] < nums[i][j] && dp[i][k]+1 > dp[i][j])
dp[i][j] = dp[i][k] + 1;
}
}
}
for(int i=0; i<n; i++)
{
int max_len = 0;
for(int j=0; j<len[i]; j++)
{
if(dp[i][j] > max_len)
max_len = dp[i][j];
}
printf("%d\n", max_len);
}
return 0;
}
```
这个程序和前面的程序基本一致,只是在输出时多了一个循环,用来输出每个字符串的最长递增子序列的长度。
阅读全文