问题标题: 酷町堂:4245我哪错了?

0
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。(不要问我怎么知道的)

通往4245的传送门

求各位大神救救本蒟蒻!

 


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
我要回答