斜率最佳化專題4——bzoj 1911: [Apio2010] 特別行動隊 題解

來源:互聯網
上載者:User

標籤:題解   bzoj   斜率最佳化   

【原題】

1911: [Apio2010]特別行動隊Time Limit: 4 Sec  Memory Limit: 64 MB
Submit: 2134  Solved: 911
[Submit][Status]DescriptionInputOutputSample Input4
-1 10 -20
2 2 3 4 Sample Output9HINT


【分析】只要跟著我前面的題目走,這道題真的是太水了。神馬題解都不用參考,公式隨便推。

易知方程是f[i]=max(f[j]+A*(sum[i]-sum[j])^2+B*(sum[i]-sum[j])+C)
設k比j優。
f[k]+A(sum[i]-sum[k])^2+B(sum[i]-sum[k])+C>f[j]+A(sum[i]-sum[j])^2+B(sum[i]-sum[j])+C
f[k]-2*A*sum[i]*sum[k]+A*sum[k]^2-B*sum[k]>f[j]-2*A*sum[i]*sum[j]+A*sum[j]^2-B*sum[j]
f[k]-f[j]+A*(sum[k]^2-sum[j]^2)+B*(sum[j]-sum[k])>2*A*sum[i]*(sum[k]-sum[j])
(f[k]-f[j]+A*(sum[k]^2-sum[j]^2)+B*(sum[j]-sum[k]))/2/(sum[k]-sum[j])/A<sum[i]

【代碼】

#include<cstdio>#include<algorithm>using namespace std;long long n,a[1000005],f[1000005],q[1000005],sum[1000005],ans,h,t,i,A,B,C,j;long long M(long long x){return x*x;}double xie(long long k,long long j){  double temp=(f[k]-f[j]+A*(M(sum[k])-M(sum[j]))+B*(sum[j]-sum[k])+0.0)/2.0/(sum[k]-sum[j])/A;  return temp;}int main(){  scanf("%lld",&n);  scanf("%lld%lld%lld",&A,&B,&C);  for (i=1;i<=n;i++)    scanf("%lld",&a[i]),sum[i]=sum[i-1]+a[i];  f[0]=0;h=t=1ll;q[1]=0;  for (i=1;i<=n;i++)  {    while (h<t&&xie(q[h+1],q[h])<=sum[i])       h++;    f[i]=f[q[h]]+A*M(sum[i]-sum[q[h]])+B*(sum[i]-sum[q[h]])+C;    while (h<t&&xie(q[t],q[t-1])>xie(i,q[t])) t--;      q[++t]=i;    }    printf("%lld",f[n]);  return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.