<开学毒瘤赛>の题解(T4)

TO BE CONTINUED

注:最近较忙,只贴代码,详解请等待

正解:二分+DP

因为数据太水 咳咳... 某些玄学DP也能过

但是最近我加强了一波数据,所以玄学DP过不了第11个点

所以是这样的:

#include<iostream>
#include<cstdio>
using namespace std;
int n,a[20001],mx[20001],mn[20001],ans;
int check(int x)
{
    mn[1]=mx[1]=a[1];
    for(int i=2;i<=n;i++)
        mx[i]=min(a[i],a[1]-mn[i-1]),mn[i]=max(0,a[1]+a[i-1]+a[i]-mx[i-1]-x);
    if(!mn[n]) return 1;
    return 0;
}
int main()
{
    int l=0,r=0;
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d",&a[i]),l=max(l,a[i]+a[i-1]);
    r=2*l+1;
    while(l<=r)
    {
        int mid=(l+r)>>1;
        if(check(mid)) ans=mid,r=mid-1;
        else l=mid+1;
    }
    printf("%d\n",ans*3);
    return 0;
}
全部评论

相关推荐

10 收藏 评论
分享
牛客网
牛客企业服务