【BZOJ1010】【HNOI2008】玩具装箱toy 动规_斜率优化
来源:互联网 发布:中国网络广告公司排名 编辑:程序博客网 时间:2024/05/17 08:16
第一道斜率优化题,题解仍然不是很透彻。
我在这里可以推荐一篇博客。
http://blog.sina.com.cn/s/blog_5f5353cc0100jx41.html
写得还好,但是可能有一些地方仍说的不是很明白。
我说一下我对斜率优化的理解:
就是发现某道动态规划的题会TLE,然后它又恰巧符合某些丧心病狂的性质时的一种优化。
本质是有限度地捏造出一种性质,使得动规方程满足某种邪恶的单调性,从而得到大幅度的优化。
而这个单调性是怎么得到的呢?
就是我们把原转移状态搞出来,一顿转化,比如把平方拆开等,本来有两种转移j->i和k->i,我们使它原来有一个大小关系DP[j->i]<=DP[k->i],而最终转化成左边是一个有j和k的式子,右边是一个只有i的式子,这样达到高速判断两个转移哪家强的目的。
而思想上wyf给我说了一个好理解的版本如下。
就是它!我们要维护一个凸壳,当i要加入优先队列判断j->i的斜率和k->i的斜率,然后显然k出去了,再判断h->i,嗯,留下来了,就是这样。
好了,说一些跟本题相关的具体东西。
就是首先定义f[i]=sum[i]+i,这个sum[i]是前缀和。
然后有当G(j,k)/S(j,k)<=i时j比k优。
#define G(x,y) (dp[x]-dp[y]+(f[x]+c)*(f[x]+c)-(f[y]+c)*(f[y]+c))#define S(x,y) (2*(f[x]-f[y]))
贴代码:
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define N 55000#define G(x,y) (dp[x]-dp[y]+(f[x]+c)*(f[x]+c)-(f[y]+c)*(f[y]+c))#define S(x,y) (2*(f[x]-f[y]))using namespace std;long long c,sum[N],f[N],dp[N];int n,q[N];int main(){//freopen("test.in","r",stdin);scanf("%d%lld",&n,&c);c++;for(int i=1;i<=n;i++){scanf("%lld",&sum[i]);sum[i]+=sum[i-1];f[i]=sum[i]+i;}int head=1,tail=1;q[1]=0;for(int i=1;i<=n;i++){while(head<tail&&G(q[head+1],q[head])<=S(q[head+1],q[head])*f[i]) head++;dp[i]=dp[q[head]]+(f[i]-f[q[head]]-c)*(f[i]-f[q[head]]-c);while(head<tail&&G(i,q[tail])*S(q[tail],q[tail-1])<=G(q[tail],q[tail-1])*S(i,q[tail]))tail--;q[++tail]=i;}printf("%lld\n",dp[n]);return 0;}
0 0
- 【BZOJ1010】【HNOI2008】玩具装箱toy 动规_斜率优化
- 【bzoj1010】【斜率优化】【HNOI2008】玩具装箱toy
- [HNOI2008][BZOJ1010] 玩具装箱toy - 斜率优化
- 【bzoj1010】【HNOI2008】【玩具装箱toy】【斜率优化】
- [BZOJ1010][HNOI2008]玩具装箱toy-斜率优化
- bzoj1010: [HNOI2008]玩具装箱toy 斜率优化DP
- BZOJ1010 [HNOI2008]玩具装箱toy(斜率优化dp)
- [BZOJ1010][HNOI2008]玩具装箱toy(斜率优化)
- 【bzoj1010】【HNOI2008】【玩具装箱】【toy】【动态规划】【斜率优化】
- [BZOJ1010][HNOI2008]玩具装箱toy 斜率优化第一题
- 【动态规划】【斜率优化】[BZOJ1010][HNOI2008]玩具装箱toy
- 【DP+斜率优化】[HNOI2008][HYSBZ/BZOJ1010]玩具装箱toy
- 【bzoj1010】[HNOI2008]玩具装箱toy 斜率优化DP
- [BZOJ1010][HNOI2008]玩具装箱toy(斜率优化dp)
- 斜率优化dp专题 & BZOJ1010 HNOI2008 玩具装箱toy
- BZOJ1010: [HNOI2008]玩具装箱toy 斜率优化DP
- 【BZOJ1010】【HNOI2008】玩具装箱toy(dp+斜率优化)
- [bzoj1010][HNOI2008] 玩具装箱toy DP斜率优化
- C语言面试题集;
- 大数据实时处理storm,jstorm
- MFC中多线程编程方法
- 关于HTTP 错误 500.19 - Internal Server Error错误以及0x80004005 未指定的错误
- Find Minimum in Rotated Sorted Array
- 【BZOJ1010】【HNOI2008】玩具装箱toy 动规_斜率优化
- WideCharToMultiByte(Unicode转char *)
- 谈下自己开发的一个点菜系统
- PRMY LDCm0toms官方網 NIXY wju
- 5es6 pF2atair max 男鞋 Ikop Frs
- 优先队列
- Intent 意图
- dsNL 2dDxD愛迪達 LfzK sTR
- AsyncHttpClient的用法