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的算法一开始看网上各种大牛博客自以为懂了,最后才发现是错了. 不过觉得看那些博客中都是用文字来描述, ...
随机推荐
- java-异常进阶-包的使用
一 finally 1.1 异常执行的顺序 package test; public class Test { public static void main(String[] args) { Dem ...
- git操作github指令
常用git命令: $ git clone //本地如果无远程代码,先做这步,不然就忽略 $ cd //定位到你blog的目录下 $ git status //查看本地自己修改了多少文件 $ git ...
- Git clone远程仓库
git clone git@ip地址:/home/git_data/wechat.git
- margin负值5种应用
最近做的项目中经常会用到margin的负值,这里就总结一下关于margin负值的5种使用及相关bug的解决. 1. 在流动性布局中的应用 如WordPress的两栏式不固定布局就是使用margin负值 ...
- spring拦截器Interceptor
在Spring Boot中,拦截器可以分为两种类型: 一是WebMVC,负责拦截请求,类似于过滤器,对用户的请求在Controller接收前进行处理,在Controller处理完成后加工结果等.使用时 ...
- Python 运算符首尾匹配
- 安装babel-preset-stage-0为了不打包所有的组件
今天 看到一段话 是否是我们可以通过这个自定义多种组件,但是只选择我们需要的组件进行打包
- 技巧专题3(cdq分治、整体二分等)
cdq分治与整体二分 cdq来源于2008年国家集训队作业陈丹琦(雅礼巨佬),用一个log的代价完成从静态到动态(很多时候是减少时间那一维的). 对于一个时间段[L, R],我们取mid = (L + ...
- 【JZOJ4935】【NOIP2017GDKOI模拟1.12】b
Boring 构造一棵包含1号结点的连通子集个数刚好为给定的n的树. 这棵树的结点不能多于60. 1<=n<=109 Gai 容易得到,计算给定一棵树的Ans1,其中Ansi表示包含i号结 ...
- Directx教程(24) 简单的光照模型(3)
原文:Directx教程(24) 简单的光照模型(3) 在工程myTutorialD3D11_17中,我们重新定义我们的cube顶点法向,每个三角形面的顶点法向都是和这个三角形的面法向是一致 ...