动态规划问题,我们需要分析出他的转移方程。
设f[n]表示以下标n的元素结尾子序列的最长长度。显然我们需要对下标n前面的所有元素遍历一遍找出最长的,转移方程如下所示:
代码如下所示:
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 给定数组的最长严格上升子序列的长度。
* @param arr int整型vector 给定的数组
* @return int整型
*/
int LIS(vector<int>& arr) {
// write code here
if(arr.size()==0) return 0;
int size=arr.size();
vector<int> dp(size, 1);
int res=1;
for(int i=1;i<size;++i){
for(int j=0;j<i;++j){
if(arr[i] > arr[j]){
dp[i] = max(dp[i], dp[j]+1);
}
res=max(res, dp[i]);
}
}
return res;
}
};