HDU3507-Print Article-斜率dp入门题
为了学CDQ分治,从斜率dp和凸包开始做吧。。
代码就是维护一个凸包。利用递增的性质丢掉不合适的点。
http://www.cnblogs.com/Rlemon/p/3184899.html
代码学的上面 很模板
#include <cstdio>
#include <algorithm> using namespace std;
//typedef long long LL; struct Point{
int x,y;
Point (int _x=,int _y=):x(_x),y(_y){}
Point operator - (const Point &rhs) const
{
return Point(x-rhs.x,y-rhs.y);
}
};
typedef Point Vector;
inline int Cross(const Vector &u,const Vector &v)
{
return u.x*v.y - u.y*v.x;
} const int maxn = 5e5+;
int N,M;
int sum[maxn],save[maxn];
int dp[maxn];
struct dequeue{
Point q[maxn];
int head,tail;
void init()
{
head = ;tail = ;
//q[head].x = 0;q[head].y = 0;
}
void push(const Point &u)
{
while(head < tail && Cross(q[tail]-q[tail-],u-q[tail])<=) tail--;
q[++tail] = u;
}
Point pop(const int &k)
{
while(head < tail && k*q[head].x+q[head].y >= k*q[head+].x + q[head+].y) head++;
//printf("head:%d x:%d y:%d\n",head,q[head].x,q[head].y);
return q[head];
}
}H; int main()
{
//freopen("input.txt","r",stdin);
while(~scanf("%d%d",&N,&M))
{
sum[] = ;
for(int i=;i<=N;i++)
{
scanf("%d",&save[i]);
sum[i] = sum[i-]+save[i];
}
H.init();
H.push(Point(,));
dp[] = ;
for(int i=;i<=N;i++)
{
int k = -*sum[i];
Point u = H.pop(k);
//printf("i:%d k:%d u.x:%d u.y:%d\n",i,k,u.x,u.y);
dp[i] = u.x*k + u.y + sum[i]*sum[i] + M;
H.push(Point(sum[i],dp[i]+sum[i]*sum[i]));
//printf("push:%d %d\n",sum[i],dp[i]+sum[i]*sum[i]);
}
printf("%d\n",dp[N]);
}
}
HDU3507-Print Article-斜率dp入门题的更多相关文章
- hdu3507 Print Article(斜率DP优化)
Zero has an old printer that doesn't work well sometimes. As it is antique, he still like to use it ...
- HDU3507 Print Article —— 斜率优化DP
题目链接:https://vjudge.net/problem/HDU-3507 Print Article Time Limit: 9000/3000 MS (Java/Others) Mem ...
- hdu3507 Print Article[斜率优化dp入门题]
Print Article Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)To ...
- [hdu3507 Print Article]斜率优化dp入门
题意:需要打印n个正整数,1个数要么单独打印要么和前面一个数一起打印,1次打印1组数的代价为这组数的和的平方加上常数M.求最小代价. 思路:如果令dp[i]为打印前i个数的最小代价,那么有 dp[i] ...
- HDU3507 Print Article(斜率优化dp)
前几天做多校,知道了这世界上存在dp的优化这样的说法,了解了四边形优化dp,所以今天顺带做一道典型的斜率优化,在百度打斜率优化dp,首先弹出来的就是下面这个网址:http://www.cnblogs. ...
- HDU3507 Print Article (斜率优化DP基础复习)
pid=3507">传送门 大意:打印一篇文章,连续打印一堆字的花费是这一堆的和的平方加上一个常数M. 首先我们写出状态转移方程 :f[i]=f[j]+(sum[i]−sum[j])2 ...
- HDU 3507 - Print Article - [斜率DP]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3507 Zero has an old printer that doesn't work well s ...
- hdu 2993 MAX Average Problem(斜率DP入门题)
题目链接:hdu 2993 MAX Average Problem 题意: 给一个长度为 n 的序列,找出长度 >= k 的平均值最大的连续子序列. 题解: 这题是论文的原题,请参照2004集训 ...
- poj 3254 状压dp入门题
1.poj 3254 Corn Fields 状态压缩dp入门题 2.总结:二进制实在巧妙,以前从来没想过可以这样用. 题意:n行m列,1表示肥沃,0表示贫瘠,把牛放在肥沃处,要求所有牛不能相 ...
- 【dp入门题】【跟着14练dp吧...囧】
A HDU_2048 数塔 dp入门题——数塔问题:求路径的最大和: 状态方程: dp[i][j] = max(dp[i+1][j], dp[i+1][j+1])+a[i][j];dp[n][j] = ...
随机推荐
- C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 严格的用户账户审核功能
整个集团有几万个用户,一个个用户添加是不现实的,只有每个公司的系统管理员添加.或者用户申请帐户,然后有相应的管理员审核,才会更准确一些. 每个公司.分公司.部门的账户情况只有所在公司的管理员是最清楚的 ...
- MYSQL中SUM (IF())
今天一个朋友突然给我发过来一个sql语句,一下子问住我了. 我想,这种语法木有见过呀.我就查了查,才明白什么意思,原来是mysql里面的用法. SUM(IF(`hosts`.state = 0, 1, ...
- H5 35-背景平铺属性
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- hadoop和java 配置环境变量的的tar
第一步:打开工具上传tar包 如下图 第二步:在文件路径下查看是否上传成功 第三步:解压tar包 tar -zxvf hadoop.2.6.5.tar.gz 第四步:配置环 ...
- Python爬虫:爬取人人都是产品经理的数据
爬取内容: 人人都是产品经理首页(www.woshipm.com)左侧[最新文章]下如图样式的文章标题.浏览量和缩略图. 思路: 1. 用BeautifulSoup解析网页 变量名 = Beautif ...
- 我的集合学习笔记--ArrayList
一,ArrayList 实现自己的ArrayList:主要是添加方法,理解自动扩容机制 代码+注释 package com.amazing.jdk.learn2List.list_08_13; /** ...
- MySQL的视图总结
使用下面格式创建视图: create or replace view viewName as select ..... from ...... where .... 删除视图: drop view v ...
- Java Core - 创建对象的两种方式
一.通过new关键字创建对象 Hello hello = null; // 声明一个引用 hello = new Hello(); // 创建对象 以上两行代码相当于 Hello hello ...
- [微软].net2.1 的兼容支持情况.
dotnet core 现在看起来 不支持xp 不支持 win10 最早版本的 和 版本. 军工客户 如果还不升级 winxp的话 可能还是没法用(客户端运行时) 不过根据前段时间安装的国产linux ...
- 【学亮IT手记】PL/SQL游标编程
游标提供了一种从表中检索数据并进行操作的灵活手段,主要用在服务器上,处理由客户端发送给服务器端的sql语句,或者是批处理.存储过程.触发器中的数据处理请求. 显式游标 是由用户声明和操作的一种游标,通 ...