<开学毒瘤赛>の题解(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;
}
查看7道真题和解析