博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 1911: [Apio2010]特别行动队 2011-12-26
阅读量:4309 次
发布时间:2019-06-06

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

1911: [Apio2010]特别行动队

Time Limit: 4 Sec  Memory Limit: 64 MB

Submit: 892  Solved: 359
[][][]

DescriptionInputOutputSample Input4

-1 10 -20
2 2 3 4 Sample Output9HINT

Source

_________________________________________

很简单的动规方程: F[i]:=max(F[j]+a*(s[i]-s[j])^2+b*(s[i]-s[j])+c)

用斜率式优化:  

   原方程展开:      F[i]:=max(F[j]+a*s[i]^2-2*a*s[i]*s[j]+a*s[j]^2+b*s[i]-b*s[j]+c)

   设g(i,j)为  F[i] 的一个决策

            则  g(i,j)-g(i,k)=f[j]+a*s[j]^2-(f[k]+a*s[k]^2)-(b+a*s[i]^2)*(s[j]-s[k]) 

           当 决策j 优于决策 k时  g(i,j)-g(i,k)>0        

            设 y[i]=f[i]+a*s[i]^2  , x[i]=s[i]

           所以可化简为      (y[k]-y[j])/(x[i]-x[j])>b+a*s[i]^2   

            因为 a<0 所以  b+a*s[i]^2 单调递减。

_________________________________________

 

1 ProgramStone;  2 var i,j,head,tail,a,b,c,n:longint;     s,f,cons,sq,que:array[0..1000001]ofint64;   3 function delhead(i,j,k:longint):boolean;   4 begin   5     if cons[i]*(s[j]-s[k])>sq[j]-sq[k] then   6         exit(true)                                      7     else 8         exit(false);    9 end; 10 functiondeltail(i,j,k:longint):boolean;   11 begin    12     if(sq[i]-sq[j])*(s[j]-s[k])>(sq[j]-sq[k])*(s[i]-s[j])     13     then exit(true)                                                                    14     else exit(false);   15 end; 16 functionmax(a,b:int64):int64;   17 begin    18 ifa>b thenmax:=a elsemax:=b;   19 end;20 Begin  21 readln(n);   22 readln(a,b,c);   23 fori:=1ton do   read(s[i]);   24 fori:=2ton do   inc(s[i],s[i-1]);   25  head:=1;tail:=0;  26  fori:=1ton do   27 begin     28 cons[i]:=b+2*a*s[i];      while(tail>head)and(delhead(i,que[head],que[head+1])) do29 inc(head);      30 j:=que[head];      31 f[i]:=max(a*sqr(s[i])+b*s[i]+c,f[j]+a*sqr(s[i]-s[j])+b*(s[i]-s[j])+c);      32 sq[i]:=f[i]+a*sqr(s[i]);      while(tail>head)and(deltail(i,que[tail],que[tail-1])) dodec(tail);      inc(tail);      33 que[tail]:=i;    34 end;  35  writeln(f[n]);36  end.37 38

 

转载于:https://www.cnblogs.com/yesphet/p/5236331.html

你可能感兴趣的文章
mongodb查询优化
查看>>
五步git操作搞定Github中fork的项目与原作者同步
查看>>
git 删除远程分支
查看>>
删远端分支报错remote refs do not exist或git: refusing to delete the current branch解决方法
查看>>
python multiprocessing遇到Can’t pickle instancemethod问题
查看>>
APP真机测试及发布
查看>>
通知机制 (Notifications)
查看>>
10 Things You Need To Know About Cocoa Auto Layout
查看>>
一个异步网络请求的坑:关于NSURLConnection和NSRunLoopCommonModes
查看>>
iOS 如何放大按钮点击热区
查看>>
ios设备唯一标识获取策略
查看>>
获取推送通知的DeviceToken
查看>>
Could not find a storyboard named 'Main' in bundle NSBundle
查看>>
CocoaPods安装和使用教程
查看>>
Beginning Auto Layout Tutorial
查看>>
block使用小结、在arc中使用block、如何防止循环引用
查看>>
iPhone开发学习笔记002——Xib设计UITableViewCell然后动态加载
查看>>
iOS开发中遇到的问题整理 (一)
查看>>
Swift code into Object-C 出现 ***-swift have not found this file 的问题
查看>>
为什么你的App介绍写得像一坨翔?
查看>>