1、题目要求
给定一个序列A={x1,x2,x3,x4……xn},求A的上升子序列的长度,子序列不要求连续。
2、用动态规划的四步解题
(1)最长上升序列的结构
若序列A的长度为1,则最长上升子序列的长度就为1,可以用dp【i】(i表示以a[i]结尾的最长上升序列的长度)来表示,同时也可以用dp[j]除了a[i]之外的最长上升序列的长度,其中0<=j<i,a[i]>a[j],那么最长上升序列的长度也可以用dp[j]+1来表示。
(2)递归公式
dp[i]=max{dp[i],dp[j]+1}(0<=j<i,a[j]<a[i])
(3)计算最优值
int FIS(int A[],int n){
int ans =1;
int dp[];
for(int i=1;i<=n;i++){
for(int j=1;j<i;j++){
if(a[j]<a[i]){
dp[i]=max(dp[i],d[j]+1);
}
}
ans = max(ans,dp[i]);
}
return ans;
}
如果有看到这个代码的同学,有问题的可以私聊我,这是我初学时,第一次不全面的感悟,如果有更好的解释方法,大家可以告诉我,我们一起学习。