[BZOJ3437]小P的牧场
来源:互联网 发布:本地服务器域名绑定 编辑:程序博客网 时间:2024/05/01 06:42
原题地址
同BZOJ1096…
AC code:
#include <cstdio>#include <queue>using namespace std;typedef long long ll;const ll N=1000010;const ll INF=(1<<29)*(1<<29);ll n;ll a[N],b[N],s[N],t[N],f[N];struct Vec{ ll x,y; Vec() {} Vec(ll x,ll y):x(x),y(y) {} friend Vec operator-(Vec a,Vec b){ return Vec(a.x-b.x,a.y-b.y); } friend ll operator*(Vec a,Vec b){ return a.x*b.y-a.y*b.x; }};deque<Vec> Q;int main(){ scanf("%lld",&n); for(ll i=1;i<=n;i++) scanf("%lld",&a[i]); for(ll i=1;i<=n;i++) scanf("%lld",&b[i]); for(ll i=1;i<=n;i++) s[i]=s[i-1]+b[i]; for(ll i=1;i<=n;i++) t[i]=t[i-1]+s[i-1]; for(ll i=1;i<=n;i++){ ll A=-i; Vec tmp=Vec(s[i-1],f[i-1]-t[i-1]+(i-1)*s[i-1]); while(Q.size()>1){ Vec a,b; a=Q.front();Q.pop_front();b=Q.front(); if((tmp-a)*(a-b)<0){ Q.push_front(a); break; } } Q.push_front(tmp); while(Q.size()>1){ Vec a,b; a=Q.back();Q.pop_back();b=Q.back(); if(A*a.x+a.y<A*b.x+b.y){ Q.push_back(a); f[i]=A*a.x+a.y; break; } f[i]=A*b.x+b.y; } f[i]+=a[i]+t[i]; } printf("%lld\n",f[n]); return 0;}
0 0
- [BZOJ3437]小P的牧场
- [BZOJ3437] 小P的牧场
- bzoj3437 小P的牧场
- BZOJ3437 小P的牧场
- bzoj3437 小P的牧场
- [bzoj3437] 小P的牧场
- BZOJ3437: 小P的牧场
- BZOJ3437: 小P的牧场
- 【bzoj3437】小P的牧场
- bzoj3437 小P的牧场
- [BZOJ3437] 小P的牧场 && 斜率优化
- 【斜率优化】[BZOJ3437] 小P的牧场
- BZOJ3437 小P的牧场 斜率优化
- bzoj3437小P的牧场(斜率优化)
- 【BZOJ3437】小P的牧场 斜率优化 动态规划
- 【bzoj3437】【小p的牧场】【斜率优化dp】
- 【BZOJ3437】小P的牧场,斜率优化DP
- [BZOJ3437]小P的牧场(斜率优化dp)
- BigDecimal 加减乘除
- [BZOJ3156]防御准备
- struts 2 counter计数器 用于for循环
- Java学习笔记【泛型程序设计】
- 开篇:markdown编辑器使用
- [BZOJ3437]小P的牧场
- HDU 5479 DP
- Java web高级编程——Spring Framework
- Java内部类小结
- yum install.. Centos7 Coulded not retrieve mirrorlist
- Ubuntu搭建网站环境
- Telnet和Rlogin以及SSH
- Activity的生命周期
- HDOJ5475 An easy problem(暴力 & 线段树)