hdu3570, 超级简单的斜率优化dp
dp[i] = dp[j] + (a[i] - a[j])^2 + m;
展开得 dp[i] = min{dp[j] + a[i]^2 + a[j]^2 - 2*a[i]*a[j] + m}
其中a[i]^2 是与i相关的变量, 而m是常量,所以可以从表达式中抽离出来
所以只要求 dp[i] = min{dp[j] + a[j]^2 + 2*a[i]*a[j]} 即可,
设k = a[i] , x = 2*a[j], y = dp[j] + a[j]^2,G = dp[i]
那么就是G = -kx + y,
为了得到dp[i]的最小值, 那么需要枚举j,那么相当于二维的坐标系上有很多个点,
然后有一条斜率为-k的直线从y轴下方无限远处慢慢向上平移, 直到经过坐标系上的一个点,
那么此时与y轴的截距G是最小的,
我们只要维护一个凸包就行了。
设红线的斜率为k,直线ab的斜率为kab,
如果k<kab, 那么点a就是最优的,因为如果要经过点a之后的点,就必须把红线往上平移
如果k>kab, 那么点a不是最优的,因为如果要经过点b,是把红线往下移,也就是说点a是可以舍弃的,因为k=a[i],
而a[i]是递增不减的,所以说点a是当前可舍弃,以后也可舍弃的
至于k==kab, 那么点a也是可舍弃的
为什么不在凸包上的点就不可能成为最优点呢?
因为t不在凸包上,所以ktb < kat
如果t可以成为最优的,那么就是说存在一条斜率为k的直线
使得k>=kat且 k<ktb, 然而ktb < kat, 所以这是不可能发生的事情,所以舍弃掉
所以我们就是维护一个凸包就行啦。
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <functional>
#include <map>
#include <set>
using namespace std;
typedef long long LL;
const int INF = <<;
/*
* */
const int N = + ;
int a[N];
int dp[N];
int q[N],head,tail;
int n,m;
int getUp(int k1, int k2)
{
return (dp[k1]+a[k1]*a[k1]) - (dp[k2]+a[k2]*a[k2]);
}
int getDown(int k1, int k2)
{
return a[k1] - a[k2];
}
int getDp(int i, int k)
{
return dp[k] + (a[i] - a[k]) * (a[i] - a[k]) + m;
}
int main()
{
//freopen("/Users/whoami/in.txt","r",stdin);
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(dp,,sizeof(dp));
for(int i=;i<=n;++i)
{
scanf("%d",&a[i]);
a[i] += a[i-];
}
head = tail = ;
q[tail++] = ;
for(int i=;i<=n;++i)
{
/*
while(head+1<tail && getDp(i,q[head])<=getDp(i,q[head+1]))
head++;
*/
//得到最优值
while(head+<tail && getUp(q[head+], q[head])<= * a[i] * getDown(q[head+], q[head]))
head++;
dp[i] = getDp(i,q[head]);
//维护下凸包,
while(head+<tail && getUp(q[tail-],q[tail-])*getDown(i,q[tail-]) >= getUp(i,q[tail-])*getDown(q[tail-],q[tail-]))
tail--;
q[tail++] = i; }
printf("%d\n",dp[n]);
}
return ;
}
hdu3570, 超级简单的斜率优化dp的更多相关文章
- [BZOJ3156]防御准备(斜率优化DP)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3156 分析: 简单的斜率优化DP
- 2018.09.10 bzoj1597: [Usaco2008 Mar]土地购买(斜率优化dp)
传送门 终究还是通宵了啊... 这是一道简单的斜率优化dp. 先对所有土地排序,显然如果有严格小于的两块土地不用考虑小的一块. 于是剩下的土地有一条边单增,另外一条单减. 我们假设a[i]是单减的,b ...
- HDU 2829 Lawrence (斜率优化DP或四边形不等式优化DP)
题意:给定 n 个数,要你将其分成m + 1组,要求每组数必须是连续的而且要求得到的价值最小.一组数的价值定义为该组内任意两个数乘积之和,如果某组中仅有一个数,那么该组数的价值为0. 析:DP状态方程 ...
- 蒟蒻关于斜率优化DP简单的总结
斜率优化DP 题外话 考试的时候被这个玩意弄得瑟瑟发抖 大概是yybGG的Day4 小蒟蒻表示根本不会做..... 然后自己默默地搞了一下斜率优化 这里算是开始吗?? 其实我讲的会非常非常非常简单,, ...
- 斜率优化dp 的简单入门
不想写什么详细的讲解了...而且也觉得自己很难写过某大佬(大米饼),于是建议把他的 blog 先看一遍,然后自己加了几道题目以及解析...顺便建议看看算法竞赛(蓝皮书)的 0x5A 斜率优化(P294 ...
- HDU 3507 Print Article(斜率优化DP)
题目链接 题意 : 一篇文章有n个单词,如果每行打印k个单词,那这行的花费是,问你怎么安排能够得到最小花费,输出最小花费. 思路 : 一开始想的简单了以为是背包,后来才知道是斜率优化DP,然后看了网上 ...
- bzoj1010[HNOI2008]玩具装箱toy 斜率优化dp
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 11893 Solved: 5061[Submit][S ...
- 2018.09.05 任务安排(斜率优化dp)
描述 这道题目说的是,给出了n项必须按照顺序完成的任务,每项任务有它需要占用机器的时间和价值.现在我们有一台机器可以使用,它每次可以完成一批任务,完成这批任务所需的时间为一个启动机器的时间S加上所有任 ...
- 斜率优化DP学习笔记
先摆上学习的文章: orzzz:斜率优化dp学习 Accept:斜率优化DP 感谢dalao们的讲解,还是十分清晰的 斜率优化$DP$的本质是,通过转移的一些性质,避免枚举地得到最优转移 经典题:HD ...
随机推荐
- 禁用viewstate
<asp:Dropdownlist/>禁用viewstate以后 public partial class _Default : System.Web.UI.Page { ...
- Swift - 继承UIView实现自定义可视化组件(附记分牌样例)
在iOS开发中,如果创建一个自定义的组件通常可以通过继承UIView来实现.下面以一个记分牌组件为例,演示了组件的创建和使用,以及枚举.协议等相关知识的学习. 效果图如下: 组件代码:Score ...
- ARP欺骗,骗你没商量
今天BOSS让我总结ARP欺骗的原理和防范策略,在这里把总结的结果贴出来吧.求人品,求速转正. ARP原理: 在局域网内部,各主机之间以MAC地址作为标识通信对象的标志.然而,有时通信发起的主机并不知 ...
- hdu 1665 That Nice Euler Circuit(欧拉定理)
输入n个点,然后从第一个点开始,依次链接点i->点i+1,最后回到第一点(输入中的点n),求得到的图形将平面分成了多少部分. 根据欧拉定理 v_num + f_num - e_num = 2可知 ...
- Swift - 告警提示框(UIAlertController)的用法
自iOS8起,苹果就建议告警框使用UIAlertController来代替UIAlertView.下面总结了一些常见的用法: 1,简单的应用(同时按钮响应Handler使用闭包函数) 1 2 3 ...
- Swift - 工具条(UIToolbar)的用法
1,UIBarButtonItem是工具条按钮,有如下5种init初始化方法: (1)初始化为普通图片按钮 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1 ...
- 《大数据互联网大规模数据挖掘与分布式处理》阅读笔记(四)-----WEB广告
作者: 沈慧 目前,许多WEB应用通过广告而维持生计,从在线广告中获益最多的是搜索应用,“adwords”模型就是一种用于搜索查询和广告匹配的模型.这一章介绍了在线广告的相关问题.在线算法.Adwor ...
- ISO/OSI网络体系结构和TCP/IP协议模型
1. ISO/OSI的参考模型共有7层,由低层至高层分别为:物理层.数据链路层.网络层.传输层.会话层.表示层. 应用层.各层功能分别为: (1)物理层 提供建立.维护和拆除 ...
- That's life,多一些韧性,才有更多的任性(转)
如果是正确的选择,就不要遵守太多规则. 若有容纳之心,便丰富了自己,也闪了他人,平常心,平常事 阅读,是保持时尚最节约的方式,也是快乐的源泉.可人生难免失意,有了快乐的能力,还应有面对沮丧的心胸. 相 ...
- HOG算子
原地址:http://blog.csdn.net/chlele0105/article/details/11991533 梯度直方图特征(HOG) 是一种对图像局部重叠区域的密集型描述符,它通过计算局 ...