问题标题: 酷町堂:3894 股票交易TLE 0分 求找错 样例过了

0
0
已解决
张天璨
张天璨
新手天翼
新手天翼

3894 股票交易链接

我的TLE代码:

#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
const int INF=0x3f3f3f3f;
int n,a[10010];
int g(int l,int r){
    int mid=(l+r)/2;
    int sum1=0,sum2=0,maxl=-INF,maxr=-INF;
    for(int i=mid;i>=l;i--){
        sum1+=a[i];
        maxl=max(maxl,sum1);
    }
    for(int i=mid+1;i<=r;i++){
        sum2+=a[i];
        maxr=max(maxr,sum2);
    }
    return maxl+maxr;
}
int f(int l,int r){
    if(l==r) return a[l];
    int mid=(l+r)/2;
    int maxl=f(1,mid);
    int maxr=f(mid+1,r);
    int maxm=g(1,r);
    return max(max(maxl,maxr),maxm);
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    cout<<f(1,n);
    return 0;
} 

TLE 0分!!求找错!


0
已采纳
张帆
张帆
中级天翼
中级天翼

你何必用分治,双重循环不就搞定了:

1.将每一天的价格算出来

2.从第一天开始,枚举买入和卖出分别是哪一天,(买入的天数<=卖出的天数)

3.ans取最优解

 

时间复杂度O(n^2)

0
蔡乐毅
蔡乐毅
高级光能
高级光能

兄弟,你这杀鸡何须宰牛刀?

别用那些花里胡哨的二分

两个变量就搞定了。

int minn=0x3f3f3f3f,maxn;

输入

循环(遍历数组){

    minn=min(minn,a[i]);

    maxn=max(maxn,a[i]-minn);

}

输出maxn

Yes!

就这样轻轻松松的AC了!

蔡乐毅在2020-11-04 22:56:55追加了内容

minn:当前股票最小值

maxn:当前最大收益

我要回答