dp题:
1.基于数字三角形的DP
2. 背包问题 ******
3. 线性状态的DP问题
>> 最长上升子序列问题
>> 最大子段和 8 -1 3 -7 9 -3
>> 最长公共子序列
>> 编辑距离
———————————————————————————————————————————
序列:
2 1 5 3 6 4 6 3
N! 个 子串
>>子序列:按顺序选取若干个值构成的序列: 2 5 6 3
>>子串: 要求选择的数必须连续
2 1 5
>>上升子序列: i:1-->n;
a[i] < a[i+1]
2 5 6 6: 不下降子序列
>>最长上升子序列 : 长度 LIS
1 3 4 6
———————————————————————————————————————————
i
a[i]: 2 1 5 3 6 4 6 3
j
dp[i]: 1 1 2 2 3
1. dp[i]: 以i结尾的最长上升子序列
2. dp[i] = 能够 接到 1-(i-1) 之间 这些数的 后面,求最大值
#include<bits/stdc++.h>
using namespace std;
int a[1001],dp[1001];
int main()
{
int n;
cin >> n;
for(int i = 1;i <= n;i++)
cin >> a[i];
for(int i = 1;i <= n;i++)
{
dp[i] = 1;
for(int j = 1;j <= i - 1;j++)
{
if(a[i] > a[j])
{
dp[i] = max(dp[i],dp[j] + 1);
}
}
}
int ans = 0;
for(int i = 1;i <= n;i++)
ans = max(ans,dp[i]);
cout << ans;
return 0;
}