0
已解决
陶旭杰
中级光能
中级光能
不会线性DP就不要往下看了!
错误代码:
#include<bits/stdc++.h>
using namespace std;
int n,a[1001],f[1001],b[1001],ans;
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
f[1]=1;
for(int i=1;i<=n;i++){
f[i]=1;
for(int j=1;j<i;j++){
if(f[j]==1||b[j]==-1&&a[j]>a[i]||b[j]==1&&a[j]<a[i]){
if(f[j]+1>f[i]){
f[i]=f[j]+1;
if(b[j]==-1) b[i]=1;
else b[i]=-1;
}
}
}
ans=max(ans,f[i]);
}
cout<<ans;
return 0;
}
80分代码,比第二个点答案少1,比第九个点答案多1。(不要问我怎么知道的)
求各位大神救救本蒟蒻!
0
已采纳
赵逸凡
初级启示者
初级启示者
这道题可以用线性dp或者是vector容器来做,栈
赵逸凡在2019-08-12 09:42:36追加了内容
if(h.size()<=2)
cout<<h.size()<<endl;
else{
pre=h[0],cur=h[1],ans=2;
for(ll i=2;i<h.size();++i){
if((cur-pre)*(h[i]-cur)<0){//出现拐点
ans++;
pre=cur;
cur=h[i];
}
else
cur=h[i];//这是一个单调的线
}
cout<<ans<<endl;
}
这是核心类容,自己看着吧,要用到线性dp和vector
0
0
0