幸运飞艇源码下CodeForces - 311B:Cats Transport (DP+斜率优化)

Zxr960115 is owner of a large farm.幸运飞艇源码下载(http://www.1159880099.com ) QQ1159880099 He feeds m cute cats and employs p feeders. There‘s a straight road across the farm and n hills along the road, numbered from 1 to n from left to right. The distance between hill i and (i?-?1) is di meters. The feeders live in hill 1.

One day, the cats went out to play. Cat i went on a trip to hill hi, finished its trip at time ti, and then waited at hill hi for a feeder. The feeders must take all the cats. Each feeder goes straightly from hill 1 to n without waiting at a hill and takes all the waiting cats at each hill away. Feeders walk at a speed of 1 meter per unit time and are strong enough to take as many cats as they want.

For example, suppose we have two hills (d2?=?1) and one cat that finished its trip at time 3 at hill 2 (h1?=?2). Then if the feeder leaves hill 1 at time 2 or at time 3, he can take this cat, but if he leaves hill 1 at time 1 he can‘t take it. If the feeder leaves hill 1 at time 2, the cat waits him for 0 time units, if the feeder leaves hill 1 at time 3, the cat waits him for 1 time units.

Your task is to schedule the time leaving from hill 1 for each feeder so that the sum of the waiting time of all cats is minimized.

Input

The first line of the input contains three integers n,?m,?p (2?≤?n?≤?105,?1?≤?m?≤?105,?1?≤?p?≤?100).

The second line contains n?-?1 positive integers d2,?d3,?...,?dn (1?≤?di?<?104).

Each of the next m lines contains two integers hi and ti (1?≤?hi?≤?n,?0?≤?ti?≤?109).

Output

Output an integer, the minimum sum of waiting time of all cats.

Please, do not write the %lld specifier to read or write 64-bit integers in С++. It is preferred to use the cin, cout streams or the %I64d specifier.

Examples

Input
4 6 2
1 3 5
1 0
2 1
4 9
1 10
2 10
3 12
Output
3
题意:有一些猫,放在一些位置,人走到每个猫的时间已知,给个猫出现的时间已知,假设派出一个人,可以自由安排其出发时间,沿途已经出现的猫pick掉,猫等待的时间是被pick的时间减去出现的时间t,t>=0。现在有P个人,问总时间T最小是多少。

思路:对猫: 人time+猫dis-猫time。把c[i]-t[i]排序,那么就成为了把M个数划分位P个区间,每个区间的值=所有数与最大数的差值。

  DP[i][j]=min DP[k][j-1]+c[i]*(i-k)-(sum[i]-sum[k]); 

  转化:B=-c[i]*k+(dp[k][j-1]+sum[k])+c[i]*i-sum[i];

  方程的斜率为k=c[i];y= (dp[k][j-1]+sum[k]) ;截距B=DP[i][j];常数C=c[i]*i-sum[i];

复制代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=100010;
ll d[maxn],c[maxn],sum[maxn],dp[maxn][101],t;
int q[maxn],head,tail;
ll getans(int i,int j,int k){ return dp[k][j-1]+c[i](i-k)-(sum[i]-sum[k]); }
ll Y(int k,int j){ return dp[k][j-1]+sum[k]; }
int main()
{
int N,M,P,i,j,h;
scanf("%d%d%d",&N,&M,&P);
for(i=2;i<=N;i++) scanf("%I64d",&d[i]),d[i]+=d[i-1];
for(i=1;i<=M;i++){
scanf("%d%I64d",&h,&t);
c[i]=t-d[h];
}
sort(c+1,c+M+1);
for(i=1;i<=M;i++) sum[i]=sum[i-1]+c[i];
for(i=1;i<=M;i++) dp[i][1]=c[i]
(i-1)-sum[i-1];
for(j=2;j<=P;j++){
head=tail=0;
for(i=1;i<=M;i++){
while(tail>head&&Y(q[head+1],j)-Y(q[head],j)<c[i](q[head+1]-q[head])) head++;
dp[i][j]=getans(i,j,q[head]);
while(tail>head&&(Y(i,j)-Y(q[tail],j))
(q[tail]-q[tail-1])<(Y(q[tail],j)-Y(q[tail-1],j))*(i-q[tail])) tail--;
q[++tail]=i;
}
}
printf("%I64d\n",dp[M][P]);
return 0;
}
复制代码
经验:弹出队首时,可以直接通过比较结果获得。

原文地址:http://blog.51cto.com/13845277/2134455

时间: 2024-10-12 10:07:25

幸运飞艇源码下CodeForces - 311B:Cats Transport (DP+斜率优化)的相关文章

CodeForces - 311B:Cats Transport (DP+斜率优化)

Zxr960115 is owner of a large farm. He feeds m cute cats and employs p feeders. There's a straight road across the farm and n hills along the road, numbered from 1 to n from left to right. The distance between hill i and (i - 1) is di meters. The fee

(中等) CF 311B Cats Transport,斜率优化DP。

Zxr960115 is owner of a large farm. He feeds m cute cats and employs p feeders. There's a straight road across the farm and n hills along the road, numbered from 1 to n from left to right. The distance between hill i and (i - 1) is di meters. The fee

幸运飞艇源码出售Android jitpick github 码云 创建自己的远程依赖库

远程幸运飞艇源码出售论坛:haozbbs.com Q1446595067依赖 今天说一下最容易的方式 使用jitpack.io进行操作 首先先看一下效果 这里写图片描述 compile'com.xxx' 诸如此类 好 开始我们的show (我不姓陈) 第一步 在码云 或gtihub 上 创建一个仓库 这里写图片描述 然后 使用 git clone 到本地 并在这个路径下 创建项目 第二步 创建工程 目录结构如下 这里写图片描述 第三步 工程下创建一个module 选择 library 如图 这里

UX术语幸运飞艇源码下载详解:任务流,用户流,流程图以及其它全新术语

用户幸运飞艇源码下载[大神源码论坛]dsluntan.com  [布丁源码论坛]budingbbs.com 企娥3393756370 体验拥有一长串专业的术语和可交付内容.当在线查看UX相关职位描述时,所罗列的这类术语更是全面繁多.而且,随着时间的流逝和它们自身的不断演变,其中很大一部分甚至出现了定义上的重复和交叠.所以,为方便设计师,Web/app开发者以及用户等更加简单的理解这些术语和可交付内容,我认为是时候该重新整理和定义它们了. 打破它 任务流和用户流是多年来常听到的用户体验术语.虽然我

SolidityOA幸运飞艇源码下载概述及基本代码展示

Solidity是实施OA幸运飞艇源码下载[dashengba.com]Q3266397597智能合约的契约导向的高级语言.它受到C ++,Python和JavaScript的影响,旨在针对以太坊虚拟机(EVM). Solidity是静态类型的,支持继承,库和复杂的用户定义类型等功能. 您将会看到,可以创建投票,众筹,盲目拍卖,多重签名钱包等等的合约. 1 Solidity智能合约例子我们从一个基础的solidity例子开始.开始的时候,你可能看不懂每一行具体的意思,但是没关系,我们会在后续的讲

SQL语句分类:幸运飞艇源码搭建

SQL语句分类:幸运飞艇源码搭建(企 娥:217 1793 408) DDL:数据定义(对数据库和表结构的,增.删.改) 创建表:create table 表名(字段名 类型 [其他],....); 删除表:drop table 表名 修改:alter table 表名 add/modify/change/drop/rename to XXXX ** DML:数据操作(对表记录的操作,增.删.改) 添加:insert into 表名(字段名...) values(值....); 删除:delet

redhat multipath中幸运飞艇源码搭建出售配置文件简要说明

redhat multipath多路径文件大致分为是两个部分,幸运飞艇源码搭建出售Q[1152880099]multipath和device部分. 使用 mpathconf 程序设置多路径,它可创建多路径配置文件 /etc/multipath.conf.如果 /etc/multipath.conf 文件已存在,mpathconf 程序将会编辑该文件.如果 /etc/multipath.conf 文件不存在,mpathconf 程序将使用 /usr/share/doc/device-mapper-

专业提供新增幸运飞艇源码出售

本公司网站:http://www.1146616888.com/有意测试,账号请加QQ索取!QQ:1146616888专业提供广东快乐十分,重庆时时彩,北京赛车,快3,快乐8,幸运农场:除最基本的投注功能外,可根据要求新增功能和定制界面.我们设有现在最时尚的多种投注方式,代理后台强大,可独立设定下线的赔率及回佣.可以自由拟定每个玩法的浮动赔率.强大的系统分析实时注单风险,方便上线考虑走单.实时注单有截留.超额.按分成显示方式,助你稳胜无险.稳定性强,专业技术人员维护, 保证一手源码,真正源头,请

浅谈幸运28源码下载FIle协议与Http协议及区别

先看三段代码: index.html: 复制代码<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-C