Wood Processing牛客第十场 斜率优化DP
卧槽我感觉写的是对的,但是就是样例都过不了。。。留坑
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define LL long long
using namespace std;
const int maxx = ;
struct node{
int h,w;
}p[maxx];
LL dp[maxx][];
LL sums[maxx];
LL sumw[maxx];
LL que[maxx];
bool cmp(node a,node b){
return a.h<b.h;
}
LL Y(int k,int j){
return dp[k][j-]-sums[k]+(LL)sums[k]*p[k+].h;
}
LL KY(int j,int k1,int k2){
return Y(k1,j)-Y(k2,j);
}
LL X(int k){
return p[k+].h;
}
LL KX(int i,int j){
return X(i)-X(j);
}
int main(){
int n,K;
while(~scanf("%d%d",&n,&K)){
sums[]=;
sumw[]=;
for (int i=;i<=n;i++){
scanf("%d%d",&p[i].w,&p[i].h);
}
memset(dp,,sizeof(dp));
sort(p+,p++n,cmp);
for (int i=;i<=n;i++){
sums[i]=(LL)sums[i-]+p[i].w*p[i].h;
sumw[i]=(LL)sumw[i-]+p[i].w;
dp[i][]=sums[i]-(LL)sumw[i]*p[].h;
}
int l,r;
l=r=;
for (int j=;j<=K;j++){
l=r=;
que[]=;
dp[j][j]=;
for (int i=;i<=n;i++){
while(l<r && KY(j,que[l+],que[l])<=sumw[i]*KX(que[l+],que[l]))l++;
dp[i][j]=dp[que[l]][j-]+sums[i]-sums[que[l]]-(sumw[i]-sumw[que[l]])*p[que[l]+].h;
while(l<r && KY(j,que[r],que[r-])*KX(i,que[r])>=KY(j,i,que[r])*KX(que[r],que[r-]))r--;
que[++r]=i;
}
}
// for (int i=1;i<=n;i++){
// for (int j=1;j<=K;j++){
// cout<<dp[i][j]<<" ";
// }
// }
printf("%lld\n",dp[n][K]);
}
return ;
}
Wood Processing牛客第十场 斜率优化DP的更多相关文章
- 牛客第十场Rikka with Prefix Sum
由于其中的2操作非常多,我们就需要将其快速的更改,就会用到组合数的东西 其实自己手写一下就可以发现对于一个点增加的值在经过不断地前缀和累加过程中对于一点的贡献满足杨辉三角 所以我们就需要记录一下其中的 ...
- 牛客第十场 F.Popping Balloons
第一维直接遍历 第二维用线段树维护每个最左端可以得到的贡献 在线段树上每次删除一个点会影响到 X X-R X-2*R 3个值 最多操作1e5次 复杂度 6*n*logn(删了还要加回来 #i ...
- 牛客 70E 乌龟跑步 (bitset优化dp)
有一只乌龟,初始在0的位置向右跑. 这只乌龟会依次接到一串指令,指令T表示向后转,指令F表示向前移动一个单位.乌龟不能忽视任何指令.现在我们要修改其中正好n个指令(一个指令可以被改多次,一次修改定义为 ...
- 2019牛客暑期多校训练营(第十场)J - Wood Processing (斜率优化DP)
>传送门< 题意 $n$个宽度为$w_{i}$,高为$h_{i}$ 的 木块,要求分成$k$组,对于每组内的所有木块,高度都变为组内最低木块的高度,宽度保持不变,求变化的最小面积. 分析 ...
- 斜率优化DP学习笔记
先摆上学习的文章: orzzz:斜率优化dp学习 Accept:斜率优化DP 感谢dalao们的讲解,还是十分清晰的 斜率优化$DP$的本质是,通过转移的一些性质,避免枚举地得到最优转移 经典题:HD ...
- bzoj-1096 1096: [ZJOI2007]仓库建设(斜率优化dp)
题目链接: 1096: [ZJOI2007]仓库建设 Description L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原内陆地区(干燥少雨),L ...
- 【BZOJ-1096】仓库建设 斜率优化DP
1096: [ZJOI2007]仓库建设 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3719 Solved: 1633[Submit][Stat ...
- HDU3507 Print Article(斜率优化dp)
前几天做多校,知道了这世界上存在dp的优化这样的说法,了解了四边形优化dp,所以今天顺带做一道典型的斜率优化,在百度打斜率优化dp,首先弹出来的就是下面这个网址:http://www.cnblogs. ...
- 斜率优化dp(POJ1180 Uva1451)
学这个斜率优化dp却找到这个真心容易出错的题目,其中要从n倒过来到1的确实没有想到,另外斜率优化dp的算法一开始看网上各种大牛博客自以为懂了,最后才发现是错了. 不过觉得看那些博客中都是用文字来描述, ...
随机推荐
- 轮播图js版&jQ版
JS版轮播图 html部分和css部分自己任意定 主要构成: 1,一个固定的框 超出框的部分隐藏 2,几张图片float:left 3,下部下原点,点击切换,切换到不同的张都有红色显示 4,左右两个大 ...
- 【洛谷P2907】 【USACO08OPEN】农场周围的道路 水模拟分治
P2907 [USACO08OPEN]农场周围的道路Roads Around The Farm 题目描述 Farmer John's cows have taken an interest in ex ...
- 【CodeVS】2822 爱在心中 [2017年6月计划 强连通分量03]
2822 爱在心中 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description “每个人都拥有一个梦,即使彼此不相同,能够 ...
- jquery tooltip.js
1.引用关联的js脚本 <script type="text/javascript" src="script/jquery-1.3.2.min.js"&g ...
- webpack学习之—— 模块热替换(Hot Module Replacement)
模块热替换(HMR - Hot Module Replacement)功能会在应用程序运行过程中替换.添加或删除模块,而无需重新加载整个页面.主要是通过以下几种方式,来显著加快开发速度: 保留在完全重 ...
- cmd 运行 python
①cmd 进入行命令: ②输入 “python” + “空格”,即 ”python “:将已经写好的脚本文件拖拽到当前光标位置,然后敲回车运行即可.
- WPF学习(8)数据绑定 https://www.cnblogs.com/jellochen/p/3541197.html
说到数据绑定,其实这并不是一个新的玩意儿.了解asp.net的朋友都知道,在asp.net中已经用到了这个概念,例如Repeater等的数据绑定.那么,在WPF中的数据绑定相比较传统的asp.net中 ...
- from和modelform的用法和介绍
from和modelform的用法和介绍 一 form 1. form的作用 1. 生成HTML代码 2. 帮我们做数据有效性的校验 3. 保留上次输入内容,显示错误提示 2. form组件校验数 ...
- iOS开发中WiFi相关功能总结
http://www.cocoachina.com/ios/20160715/17022.html 投稿文章,作者:Haley_Wong(简书) 查漏补缺集是自己曾经做过相关的功能,但是重做相关功能或 ...
- QT加载qss
QString CommonHelper::setStyle(const QString &style) { QByteArray str; QFile qss(style); qss.ope ...