這個題和最長上升子序列都是一個類型的題
題意是求一個序列的最長上升子序列的長度
輸入數據是:
2
8
100 287 155 300 299 178 158 65
3
88 23 65
輸出是:
5
2
是序列dp的入門題
代碼:
#include <iostream> #include <cstring> using namespace std; int dp[1010]; int nums[1010]; int main(){ int n; cin>>n; while(n--){ int m; cin>>m; for(int i=1;i<=m;i++){ cin>>nums[i]; } int res=0; for(int i=1;i<=m;i++){ dp[i]=1; for(int j=1;j<i;j++){ if(nums[i]<nums[j]){ dp[i]=max(dp[i],dp[j]+1); } } res=max(res,dp[i]); } cout<<res<<endl; } }
這個題好像有個二分的做法可以把時間復雜度降到nlog(n)的時間復雜度(有時間寫一下)