首页 > 代码库 > AC日记——[HNOI2008]玩具装箱toy bzoj 1010
AC日记——[HNOI2008]玩具装箱toy bzoj 1010
1010
思路:
斜率优化DP;
跪烂大佬
代码:
#include <bits/stdc++.h>using namespace std;#define maxn 50005#define ll long longll que[maxn],sum[maxn],dp[maxn],n,l,ai[maxn],a;inline void in(ll &now){ char Cget=getchar();now=0; while(Cget>‘9‘||Cget<‘0‘)Cget=getchar(); while(Cget>=‘0‘&&Cget<=‘9‘) { now=now*10+Cget-‘0‘; Cget=getchar(); }}ll G(ll now){ return sum[now]+now;}ll Y(ll x,ll y){ return dp[x]+pow(G(x)+a,2)-dp[y]-pow(G(y)+a,2);}ll X(ll x,ll y){ return 2*(G(x)-G(y));}int main(){ in(n),in(l),a=l+1;ll h=0,tail=0; for(ll i=1;i<=n;i++) in(ai[i]),sum[i]=sum[i-1]+ai[i]; for(ll i=1;i<=n;i++) { while(h<tail&&Y(que[h+1],que[h])<=G(i)*X(que[h+1],que[h])) ++h; dp[i]=dp[que[h]]+(G(i)-G(que[h])-a)*(G(i)-G(que[h])-a); while(h<tail&&Y(i,que[tail])*X(que[tail],que[tail-1])<=Y(que[tail],que[tail-1])*X(i,que[tail])) --tail; que[++tail]=i; } cout<<dp[n]; return 0;}
AC日记——[HNOI2008]玩具装箱toy bzoj 1010
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。