动态规划
最长上升子序列
最长上升子序列是指在一个给定序列中,找到一个最长的子序列,使得子序列中的元素单调递增。例如,序列 [1, 3, 5, 4, 7] 的最长上升子序列是 [1, 3, 5, 7],长度为4。
这是一个经典的动态规划问题。
假设dp[i]表示以第i个元素为结尾的最长上升子序列的长度。
可以用一个嵌套循环来遍历所有的元素对,如果前一个元素小于后一个元素,则可以将后一个元素添加到前一个元素所在的最长上升子序列中,从而得到以第i个元素为结尾的最长上升子序列长度。
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1010;
int n;
int a[N],f[N];
int main()
{
cin >> n;
for(int i = 1;i <= n;i ++)cin >> a[i];
foR(int i = 1;i <= n;i ++)
{
f[i] = 1;
for(int j = 1;j < i;j ++)
if(a[j] < a[i])
{
f[i] = max(f[i] ,f[j] + 1)
}
}
int res = 0;
for(int i = 1;i <= n;i ++)res = max(res ,f[i]);
printf("%d\n",res);
return 0;
}