子串
要求一定要挨着
12
1 2 3 4 3 2 1 4 5 6 7 8
结果 5
#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]; for(int i=1;i<n;i++) { if(a[i]>a[i-1]) { dp[i]=dp[i-1]+1; if(dp[i]>maxn) maxn=dp[i]; } else dp[i]=0; } cout<<maxn; }
子序列
不一定挨着
有bug要改
#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]; for(int i=0;i<n;i++) { int maxt=0; for(int j=0;j<i;j++) { if(dp[j]>dp[i]&&a[j]>=a[i]) { dp[i]=dp[j];//更新当前的值 if(dp[i]>maxt) maxt=dp[i]; } if(dp[j]>dp[i]&&a[j]<a[i]) { dp[i]=dp[j];//更新当前的值 dp[i]++; if(dp[i]>maxt) maxt=dp[i]; dp[i]--; } } dp[i]=maxt; if(dp[i]>maxn) maxn=dp[i]; } cout<<maxn; }
标签:子串,int,maxt,maxn,数组,增加,100,最长,dp From: https://www.cnblogs.com/weinan030416/p/17103728.html