博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 3507:Print Article
阅读量:5760 次
发布时间:2019-06-18

本文共 1729 字,大约阅读时间需要 5 分钟。

HDU 3507:Print Article

题目链接:

题目大意:给定$n$,$m$,输出序列$n$个数,每连续输出代价为连续输出的数字和的平方加上$m$.

斜率优化DP

定义$sum_{pq}=\sum_{k=p+1}^qa_k=pre[q]-pre[p]$,其中$pre[]$维护的是前缀和.

直接DP:$dp[i]=min\{dp[q]+sum_{qi}+m\}(q<i)$,如此复杂度为$O(n^2)$,故需要优化.

设$p<q$,若从$q$转移而来比从$p$更优,则有$dp[q]+sum_{qi}+m<dp[p]+sum_{pi}+m$,

化简可得,$\frac{(dp[q]+pre[q]^2)-(dp[p]+pre[p]^2)}{2pre[q]-2pre[p]}<pre[i]$.

定义映射$f$,使得$k\xrightarrow{f} (2pre[k],dp[k]+pre[k]^2)$,$g[p,q]$为$f(p)$和$f(q)$两点的斜率,

则有,若$g[p,q]<pre[i]$,则$q$比$p$更优.

当$p<k<q$且$g[p,k]>g[k,q]$时,不难证明$k$一定不为最优:

当$g[k,q]<pre[i]$时,$q$比$k$更优;当$g[k,q]\geqslant pre[i]$时,有$g[p,k]>pre[i]$,故$p$比$k$更优.

考虑$pre[i]$数列的单调性,我们只需维护一个斜率递增的队列即可.

by_barriery

代码如下:

1 #include 
2 #define N 500005 3 using namespace std; 4 typedef long long ll; 5 int n,m,dp[N],a[N],pre[N],deq[N],r,f; 6 int y(int n){
return dp[n]+pre[n]*pre[n];} 7 int x(int n){
return 2*pre[n];} 8 int main(void){ 9 while(~scanf("%d%d",&n,&m)){10 r=-1,f=0;11 deq[++r]=0;12 for(int i=1;i<=n;++i){13 scanf("%d",&a[i]);14 pre[i]=pre[i-1]+a[i];15 }16 for(int i=1;i<=n;++i){17 while(r-f>0){18 if(y(deq[f+1])-y(deq[f])19 <=pre[i]*(x(deq[f+1])-x(deq[f])))20 f++;21 else break;22 }23 dp[i]=dp[deq[f]]+(pre[i]-pre[deq[f]])*(pre[i]-pre[deq[f]])+m;24 while(r-f>0){25 if((y(deq[r])-y(deq[r-1]))*(x(i)-x(deq[r]))26 >=(y(i)-y(deq[r]))*(x(deq[r])-x(deq[r-1])))27 r--;28 else break;29 }30 deq[++r]=i;31 }32 printf("%d\n",dp[n]);33 }34 }

 

转载于:https://www.cnblogs.com/barrier/p/6816390.html

你可能感兴趣的文章
数组信息[置顶] php数组转换js数组操作及json_encode应用
查看>>
jQuery给控件赋值....
查看>>
爱上MVC3~MVC+ZTree实现对树的CURD及拖拽操作
查看>>
用curl访问HTTPS站点并登录
查看>>
[置顶] android AIDL 进程间通信
查看>>
使用动态SQL语句实现简单的行列转置(动态产生列)
查看>>
Python字符编码详解(转)
查看>>
使用 IntraWeb (1) - 先测试如何部署为 Asp.Net 的应用
查看>>
TCP/IP数据包结构具体解释
查看>>
[WCF编程]7.实例上下文模式
查看>>
VMware coding Challenge
查看>>
使用EF取数据库返回的数据
查看>>
EditText获取焦点监听事件_EditText获取和失去焦点操作
查看>>
不同组织物料类别差异列表
查看>>
Tabio – 轻松,高效的管理 Chrome 标签页
查看>>
android4.0 的图库Gallery2代码分析(四) 之相册的数据处理以及显示
查看>>
事务——原子性、一致性、隔离性和持久性的理解
查看>>
MySQL内存调优
查看>>
測试文档和用户说明书
查看>>
POJ 2309 BST
查看>>