有一个N个点的环,相邻两个点距离是1。点顺时针标号为1..N。
每一个点有ci头牛,保证∑ci=N。
每头牛都可以顺时针走。设一头牛走了d个单位停下了,将耗费d^2的能量。
请设计一种牛的走法,使得每一个点上都正好有一头牛,且最小化耗费的能量。
标签:
有一个N个点的环,相邻两个点距离是1。点顺时针标号为1..N。
每一个点有ci头牛,保证∑ci=N。
每头牛都可以顺时针走。设一头牛走了d个单位停下了,将耗费d^2的能量。
请设计一种牛的走法,使得每一个点上都正好有一头牛,且最小化耗费的能量。
第一行一个数N。N <= 100000
接下来N行,每行一个数ci。
输出一个数表示耗费能量的最小值
#include<stdio.h> #include<iostream> using namespace std; const int N=100005; int n,i,s,l,x,t,w,a[N],g[N]; long long ans; int main() { scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d",&a[i]); a[n+i]=a[i]; } ans=0;x=1; for(i=1;i<=2*n-1;i++) { if(s<0) s=0,x=i; s+=a[i]-1; if(s>ans) { ans=s; l=x; } } t=1;w=0;ans=0; for(i=l;i<=l+n-1;i++) { while(a[i]--) g[++w]=i; ans+=1LL*(i-g[t])*(i-g[t]); t++; } cout<<ans; return 0; }
bzoj 4412: [Usaco2016 Feb]Circular Barn
标签:
原文地址:http://www.cnblogs.com/lwq12138/p/5566413.html