最长上升子串(dp)+贪心
作者:
巷港
,
2022-04-02 11:15:36
,
所有人可见
,
阅读 114
注意和最长上升子序列的区别:子串是连续的,子序列不必连续!
#include <iostream>
#include <cstdio>
using namespace std;
const int N = 10010;
int f[N];
int a[N];
int n;
int main()
{
cin>>n;
for (int i=1;i<=n;i++) cin>>a[i],f[i]=1;
for (int i=1;i<n;i++)
{
if (a[i+1]>a[i]) f[i+1]=f[i]+1; //注意连续!
}
int ans=1;
for (int i=1;i<=n;i++)
if (f[i]>ans) ans=f[i];
cout<<ans<<endl;
return 0;
}
贪心写法,感觉更好理解,像暴力
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 10010;
int a[N];
int n;
int main()
{
cin>>n;
for (int i=0;i<n;i++) cin>>a[i];
int cnt=1; //初始值即最长上升子串至少长度为1,即这个数字
int result=1; // 存一下答案
for (int i=0;i<n;i++) //遍历每个数字
{
if (a[i+1]>a[i])
{
cnt++;
}
else cnt=1; //此时需要更新cnt,从1开始重新计数
if (cnt>result) result=cnt; //记得每次更新答案
}
cout<<result<<endl;
return 0;
}