任务安排1

#include<bits/stdc++.h>
#define int long long
using namespace std; const int N=;
int n,s,t[N],c[N],f[N];
int sumt[N],sumc[N]; signed main(){
scanf("%lld%lld",&n,&s);
for(int i=;i<=n;i++) scanf("%lld%lld",&t[i],&c[i]),sumt[i]=sumt[i-]+t[i],sumc[i]=sumc[i-]+c[i];
memset(f,,sizeof f);
f[]=;
for(int i=;i<=n;i++){
for(int j=;j<i;j++)
f[i]=min(f[i],f[j]+(sumc[i]-sumc[j])*sumt[i]+s*(sumc[n]-sumc[j]));
//利用刷表法,将影响向后累加
}
printf("%lld\n",f[n]);return ;
}

任务安排2 数据规模变大

#include<cstdio>
#include<cstring>
#include<iostream> using namespace std; const int N=; long long f[N],sumt[N],sumc[N];
int q[N],n,s; int main(){
scanf("%d%d",&n,&s);
for(int i=;i<=n;i++){
int t,c;
scanf("%d%d",&t,&c);
sumt[i]=sumt[i-]+t;
sumc[i]=sumc[i-]+c;
}
memset(f,0x3f,sizeof f);
f[]=;
int head=,tail=;
q[]=;
for(int i=;i<=n;i++){
while(head<tail&&f[q[head+]]-f[q[head]]<=(s+sumt[i])*(sumc[q[head+]]-sumc[q[head]])) head++;
f[i]=f[q[head]]-(sumt[i]+s)*sumc[q[head]]+s*sumc[n]+sumt[i]*sumc[i];
while(head<tail&&(f[q[tail]]-f[q[tail-]])*(sumc[i]-sumc[q[tail]])>=(f[i]-f[q[tail]])*(sumc[q[tail]]-sumc[q[tail-]])) tail--;
q[++tail]=i;
}
printf("%d\n",f[n]);return ;
}

任务安排3 T可能是负数

#include<bits/stdc++.h>

using namespace std;

const int N=;
long long sumt[N],sumc[N],f[N];
int q[N],n,s,head,tail; int binarysearch(int i,int k){
if(head==tail) return q[head];
int l=head,r=tail;
while(l<r){
int mid=(l+r)>>;
if(f[q[mid+]]-f[q[mid]]<=k*(sumc[q[mid+]]-sumc[q[mid]])) l=mid+;
else r=mid;
}return q[l];
}
int main(){
cin>>n>>s;
for(int i=;i<=n;i++){
int t,c;
cin>>t>>c;
sumc[i]=sumc[i-]+c;
sumt[i]=sumt[i-]+t;
}
head=tail=;
for(int i=;i<=n;i++){
int p=binarysearch(i,s+sumt[i]);
f[i]=f[p]-(s+sumt[i])*sumc[p]+sumt[i]*sumc[i]+s*sumc[n];
while(head<tail&&(f[q[tail]]-f[q[tail-]])*(sumc[i]-sumc[q[tail]])>=(f[i]-f[q[tail]])*(sumc[q[tail]]-sumc[q[tail-]])) tail--;
q[++tail]=i;
}
cout<<f[n]<<endl;
return ;
}

bzoj 2726 任务安排(3)/loj 10184-10186 斜率优化的更多相关文章

  1. 【BZOJ 1191】 [Apio2010]特别行动队 (斜率优化)

    dsy1911: [Apio2010]特别行动队 [题目描述] 有n个数,分成连续的若干段,每段的分数为a*x^2+b*x+c(a,b,c是给出的常数),其中x为该段的各个数的和.求如何分才能使得各个 ...

  2. 【BZOJ 1597】 [Usaco2008 Mar]土地购买 (斜率优化)

    1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3601  Solved: 1322 Descrip ...

  3. 【BZOJ 1010】 [HNOI2008]玩具装箱toy (斜率优化)

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 9330  Solved: 3739 Descriptio ...

  4. 【BZOJ】1096: [ZJOI2007]仓库建设(dp+斜率优化)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1096 首先得到dp方程(我竟然自己都每推出了QAQ)$$d[i]=min\{d[j]+cost(j+ ...

  5. bzoj 2726 任务安排

    题目大意: 机器上有N个需要处理的任务,它们构成了一个序列 把这些任务分成若干批 从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间是Ti 在每批任务开始前,机器需要启动时间S,而完成这批 ...

  6. [bzoj 2726] 任务安排 (斜率优化 线性dp)

    3月14日第三题!!!(虽然是15号发的qwq) Description 机器上有N个需要处理的任务,它们构成了一个序列.这些任务被标号为1到N,因此序列的排列为1,2,3-N.这N个任务被分成若干批 ...

  7. bzoj 2726 任务安排 斜率优化DP

    这个题目中 斜率优化DP相当于存在一个 y = kx + z 然后给定 n 个对点 (x,y)  然后给你一个k, 要求你维护出这个z最小是多少. 那么对于给定的点来说 我们可以维护出一个下凸壳,因为 ...

  8. [bzoj 1911][Apio 2010]特别行动队(斜率优化DP)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1911 分析: 首先可以的到裸的方程f[i]=max{f[j]+a*(Si-Sj)^2+b*(S ...

  9. 【BZOJ】1911: [Apio2010]特别行动队(斜率优化dp)

    题目 传送门:QWQ 分析 用$ dp[i] $ 表示前 i 个人组成的战斗力之和 然后显然$ dp[i]=Max (  dp[j]+a*(sum[i]-sum[j])^2+b*(sum[i]-sum ...

随机推荐

  1. DNA Evolution CodeForces - 828E(树状数组)

    题中有两种操作,第一种把某个位置的字母修改,第二种操作查询与[L, R]内与给出字符串循环起来以后对应位置的字母相同的个数.给出的字符串最大长度是10. 用一个四维树状数组表示 cnt[ATCG的编号 ...

  2. centos7搭建ELK Cluster集群日志分析平台(三):Kibana

    续  centos7搭建ELK Cluster集群日志分析平台(一) 续  centos7搭建ELK Cluster集群日志分析平台(二) 已经安装好elasticsearch 5.4集群和logst ...

  3. SQL表的基本操作

    1.创建表: create table 表名 ( [列名] [数据类型] [约束], [列名] [数据类型] [约束], ) 2.修改基本表: alert table[表名] [add 新列名 数据类 ...

  4. BigInteger与BigDecimal

    BigInteger与BigDecimal Java大数字运算(BigInteger类和BigDecimal类) 在 Java 中提供了用于大数字运算的类,即 java.math.BigInteger ...

  5. navicat premium 12破解流程

    具体步骤:这是破解的具体链接 仅此记录,以供后续之需

  6. ElasticSearch6.3.2------查询

    进入Kibana的控制台:http://localhost:5601/app/kibana#/dev_tools/ 先放一些测试数据进去,不想一条一条,就用bulk 注意格式 正确格式: 解释:ES期 ...

  7. Eclipse搭建SpringBoot之HelloWorld

    你的eclipse需要先安装 Spring Tool Suite™ 第一种方法(不建议,之所以贴上是因为探索的过程) 首先新建Maven工程 勾选第一个按钮,第三个是选择working set ,你可 ...

  8. codeforces 540E"Infinite Inversions"

    传送门 题意: 给你一个无限大的整数序列  p = {1, 2, 3, ...}: 有 n 次操作,每次操作交换第 ai 个数和第 aj 个数: 求序列中逆序对的个数: 题解: 考虑交换完后的序列,存 ...

  9. c#UDP协议

    UDP协议是不可靠的协议,传输速率快 服务器端: using System; using System.Collections.Generic; using System.Linq; using Sy ...

  10. php mkdir No such file or director问题

    有时使用mkdir创建目录时会出现 No such file or director这样的错误,导致这个错误的原是 比如你要创建目录 a\b\c目录,但是创建时父目录b也不存在时就会出现这样的问题. ...