最长增加子数组
子串
要求一定要挨着
12
1 2 3 4 3 2 1 4 5 6 7 8
结果 6
#include<bits/stdc++.h> using namespace std; //最长连续增加子串 int a[100],dp[100],maxn=0; int main() { int n; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; dp[i]=1; } for(int i=2;i<=n;i++) { if(a[i]>a[i-1]) { dp[i]=dp[i-1]+1; } else dp[i]=1; if(dp[i]>maxn) maxn=dp[i]; } cout<<"dp"<<endl; for(int i=1;i<=n;i++) cout<<dp[i]<<" "; cout<<endl; cout<<maxn; }
子序列
不一定挨着
12
1 2 3 4 3 2 1 4 5 6 7 8
结果
8
#include<bits/stdc++.h> using namespace std; //最长连续增加子序列 ,不一定连续 int a[100],dp[100],maxn=0; int main() { int n; cin>>n; for(int i=0;i<n;i++) cin>>a[i]; int maxn=0; for(int i=1;i<=n;i++) { for(int j=1;j<i;j++) { int t=0; t=dp[j]; if(a[j]<a[i]) t++; if(t>dp[i]) dp[i]=t; } if(dp[i]>maxn) maxn=dp[i]; } cout<<maxn; }