这题咋dp啊
#include<bits/stdc++.h>
using namespace std;
int main() {
int a;
cin>>a;
vector<int>s(a,0);
vector<int>dp(a);
dp[0]=1;
// s.push_back(1);
for(int i=0;i<a;i++){
// cout<<s[i];
cin>>s[i];
}
for(int i=1;i<a;i++){
if(s[i-1]+1==s[i])
{
// if(i==1)dp[i]=2;
// else if(s[i-1]-1==s[i-2])
dp[i]=dp[i-1]+1;
// else dp[i]=max()
}
else
if(i==1)dp[i]=1;
else
dp[i]=max(dp[i-1],dp[i-1-dp[i-1]]);
}
for(int i=0;i<a;i++)
cout<<dp[i]<<" ";
// int sum=1;
// for(int i=1;i<a;i++){
// if(s[i]==s[i-1]+1){
// int z=2;
// for(int j=i+1;j<a;j++){
// if(s[j]==s[j-1]+1)z++;
// else break;
// }
// if(z>sum)sum=z;
// }
// }
// cout<<sum;
return 0;
}
d着d着不会了...
比较简单但是耗时更多的解法:
#include<bits/stdc++.h>
using namespace std;
int main() {
int a;
cin>>a;
vector<int>s(a,0);
// s.push_back(1);
for(int i=0;i<a;i++){
// cout<<s[i];
cin>>s[i];
}
int sum=1;
for(int i=1;i<a;i++){
if(s[i]==s[i-1]+1){
int z=2;
for(int j=i+1;j<a;j++){
if(s[j]==s[j-1]+1)z++;
else break;
}
if(z>sum)sum=z;
}
}
cout<<sum;
return 0;
}