bzoj2726 任务安排

非单位时间的任务安排问题 非单位时间的任务安排问题问题描述和要求测试样例具体代码 问题描述和要求 具有截止时间和误时惩罚的任务安排问题可描述如下: (1)给定 n 个任务的集合 S={1,2,…,n}; (2)完成任务 i 需要 ti时间,1≤i≤n; (3)任务 i 的截止时间 di,1≤i≤n,即要求任务 i 在时间 di之前结束; (4)任务 i 的误时惩罚 wi,1≤i≤n,即任务 i 未在时间 di之前结束将招致... 阅读详情

题目:

机器上有N个需要处理的任务,它们构成了一个序列。这些任务被标号为1到N,因此序列的排列为1,2,3...N。这N个任务被分成若干批,每批包含相邻的若干任务。从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间是Ti。在每批任务开始前,机器需要启动时间S,而完成这批任务所需的时间是各个任务需要时间的总和。注意,同一批任务将在同一时刻完成。每个任务的费用是它的完成时刻乘以一个费用系数Fi。请确定一个分组方案,使得总费用最小。

思路:

设f[i]为将前i个任务划分完成的最小费用,Ti Fi分别表示t和f的前缀和,则可以写出转移方程式:
f[i]=min{ f[j]+(F[n]-F[j])*(T[i]-T[j]+s) },1<=j<=i-1
经过整理得到:
f[i]=min{ -T[i]*F[j]+(f[j]-F[n]*T[j]+F[j]*T[j]-s*F[j]) }
设X(i)=F[i],Y(i)=f[j]-F[n]*T[j]+F[j]*T[j]-s*F[j],a(i)=T[i]则有:
f[i]=min{ -a(i)*X(j)+Y(j) }
由于不单调,所以要使用CDQ分治

代码:

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<list>
#include<numeric>
using namespace std;
#define PI acos(-1.0)
#define LL long long
#define ULL unsigned long long
#define INF 0x3f3f3f3f3f3f3f3f
#define mm(a,b) memset(a,b,sizeof(a))
#define PP puts("*********************");
template<class T> T f_abs(T a){ return a > 0 ? a : -a; }
template<class T> T gcd(T a, T b){ return b ? gcd(b, a%b) : a; }
template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}
// 0x3f3f3f3f3f3f3f3f
// 0x3f3f3f3f

const int maxn=5e5+50;
struct Node{
    LL x,y,k;
    int id;
    bool operator<(const Node &rhs)const{
        return k<rhs.k;
    }
}q[maxn],tmp[maxn];
bool cmp(const Node &a,const Node &b){
    if(a.x!=b.x) return a.x<b.x;
    return a.y<b.y;
}
int st[maxn],n,s;
LL T[maxn],F[maxn],f[maxn];
LL up(int j,int k){
    return q[k].y-q[j].y;
}
LL down(int j,int k){
    return q[k].x-q[j].x;
}
void cdq(int L,int R){
    if(L==R){
        q[L].x=F[L];
        q[L].y=f[L]-F[n]*T[L]+T[L]*F[L]-s*F[L];
        return;
    }
    int mid=(L+R)>>1;
    int sz1=L,sz2=mid+1;
    for(int i=L;i<=R;i++)
        if(q[i].id<=mid) tmp[sz1++]=q[i];
        else tmp[sz2++]=q[i];
    for(int i=L;i<=R;i++)
        q[i]=tmp[i];
    cdq(L,mid);
    int top=0;
    for(int i=L;i<=mid;i++){
        while(top>=2&&up(st[top],i)*down(st[top-1],st[top])<up(st[top-1],st[top])*down(st[top],i))
            top--;
        st[++top]=i;
    }
    int j=1;
    for(int i=mid+1;i<=R;i++){
        while(j<top&&up(st[j],st[j+1])<q[i].k*down(st[j],st[j+1]))
            j++;
        f[q[i].id]=min(f[q[i].id],-q[i].k*q[st[j]].x+q[st[j]].y+F[n]*(T[q[i].id]+s));
    }
    cdq(mid+1,R);
    sz1=L,sz2=mid+1;
    for(int i=L;i<=R;i++){
        if(sz1<=mid){
            if(sz2<=R){
                if(cmp(q[sz1],q[sz2])) tmp[i]=q[sz1++];
                else tmp[i]=q[sz2++];
            }
            else
                tmp[i]=q[sz1++];
        }
        else
            tmp[i]=q[sz2++];
    }
    for(int i=L;i<=R;i++)
        q[i]=tmp[i];
}
int main(){

//    freopen("D:\\input.txt","r",stdin);
//    freopen("D:\\output.txt","w",stdout);
    scanf("%d%d",&n,&s);
    for(int i=1;i<=n;i++){
        scanf("%lld%lld",&T[i],&F[i]);
        T[i]+=T[i-1];
        F[i]+=F[i-1];
    }
    for(int i=1;i<=n;i++){
        q[i].id=i;
        q[i].k=T[i];
        f[i]=INF;
    }
    sort(q+1,q+n+1);
    cdq(0,n);
    printf("%lld\n",f[n]);
    return 0;
}


4-13 非单位时间任务安排问题(算法设计与分析) DP 要和题目所求的状态相关,因此 DP 数组记录的是最小误时惩罚时间现在有一个问题:DP 数组应该设定为几个维度的?——看状态与哪些量相关由于截止时间did_idi​的限制,当处在某一个时间点ddd的时候,有的任务可能无法完成,导致了误时惩罚另一方面,每一个时间点,任务iii做还是不做的误时惩罚状态是不同的由此,定义二维 DP 数组dp[i][d],其中i表示第i项任务,d表示当前的时间点dp[i][d]表示当前截至时间点为d时任务i的最小误时惩罚punishi。 阅读详情

相关推荐

用贪心算法方法解最优分解问题和非单位时间任务安排问题

用贪心算法方法解最优分解问题和非单位时间任务安排问题

算法设计三(3)——非单位时间任务安排问题

pan.baidu.com/s/1w-VSMWmr9ntEWWdxZoD4Yw 码:jnlh 算法分析与设计第 3 次实验 时间 2020.5.17 实验名称 非单位时间任务安排问题 实验目的 通过上机实验,要求深度掌握贪心算法的问题描述、算法设计思想、程序设计。 ...

weixin_43973089的博客 3037

C++非单位时间任务安排问题

具有截止时间和误时惩罚的任务安排问题可描述如下。 (1) 给定 n 个任务的集合 S={1,2,...,n}; (2) 完成任务i需要ti 时间,1≤i≤n; (3) 任务 i 的截止时间 di ,1≤i≤n,即要求任务 i 在时间 di 之前结束; (4) 任务 i 的误时惩罚 wi ,1≤i≤n,即任务 i 未在时间di 之前结束将招致 wi 的惩罚; 若按时完成则无惩罚。 任务安排问题要求确定 S 的一个时间表(最优时间表)使得总误时惩罚达到最小。 对于给定的 n 个任务,编程计算总误时惩罚最小的最优时间表。

算法设计和分析——非单位时间任务安排问题——状态转移方程的讲解和源码——为什么动态规划可以使用矩阵进行实现!

文章目录题目描述(这里为了方便演示,直接改成控制台输入和输出)思路分析 题目描述(这里为了方便演示,直接改成控制台输入和输出) 思路分析 首先为了保证所有任务执行完毕之后,惩罚最小,所以要尽量保证不被惩罚。所有任务都尽量要在截至时间之前完成。所以要将所有任务按照截至时间从小到大进行排序,并且在必须惩罚得情况下,选择惩罚最小的去执行。 对样例进行排序之后,输出的结果如下 我们先仿照这类似的任务安排的算法题,复制一下对应的状态转移方程,然后在进行修改!具体参考 上面那仅仅只是根据以往的经验进行的初步推

Blackoutdragon的博客 2005

STM32的DMA模块及Protues仿真实验

(一)DMA简介      DMA(Direct Memory Access,直接存储器访问), 用于在外设与存储器之间以及存储器与存储器之间提供高速数据传输。可以在无需任何 CPU 操作的情况下通过 DMA 快速移动数据。这样节省的 CPU 资源可 供其它操作使用。      STM32F407共有两个 DMA 控制器,总共有 16 个数据流(每个控制器 8 个),每一个 DMA 控制器都用于管理 一个或多

weixin_45930204的博客 2849

「免费开源」从 OCR 识别到结构化输出:合同文本高效比对的完整解决方案!

本文将系统拆解这一解决方案的技术逻辑、实施步骤与落地价值,为企业合同管理数字化转型提供实操指南。字段提取:自动识别并提取预设的关键字段(如 “甲方”“乙方”“合同金额”“履约期限” 等),若遇到模糊表述(如 “付款时间为合同签订后 30 个工作日内”),系统可自动解析为 “履约期限:合同签订日 + 30 工作日”;预设结构化字段:根据合同类型(如采购合同、服务合同、租赁合同),定义需提取的关键字段(如 “甲方名称”“乙方名称”“合同金额”“有效期起 / 止日期”“履约地点”“违约金比例” 等);

qxsz_yyh的博客 835

BZOJ:2726: [SDOI2012]任务安排(斜率优化)

题目 你有n个任务和一台机器,第i个任务完成时间是s[i],带来的费用是它的完成时间*费用系数f[i]。 每次启动机器需要时间S,可以将几个任务分成一组,这样只需要启动一次机器,但是所有任务的完成时间都将被计算为最后一个任务完成的时间。 注意计算等待时间!!! 现在你需要使费用最小。 时间可以为负数 0 &lt; N&lt;=300000 0&lt;=S&lt;=2^8 -(2^8)&...

少主大人殿下的博客 328

东方马达步进电机AZM66AK-HS100+AZD-KD调试经验记录

东方马达步进电机AZM66AK-HS100+AZD-KD调试经验记录(20170803YC) 本次总结主要实现的功能如下:用MEXE02软件在步进电机驱动器中设置好控制动作,每个控制动作有一个特定的编号。之后通过PC和驱动器之间的485通讯,发送相关指令,使步进电机按照一定编号的控制动作运转。 参考资料:东方马达步进电机AZM66AK-HS100+AZD-KD的产品手册,可在官网下载。 A....

dahailuoa6的博客 1万+

【BZOJ2726】[SDOI2012]任务安排 斜率优化+cdq分治

【BZOJ2726】[SDOI2012]任务安排 Description 机器上有N个需要处理的任务,它们构成了一个序列。这些任务被标号为1到N,因此序列的排列为1,2,3...N。这N个任务被分成若干批,每批包含相邻的若干任务。从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间是Ti。在每批任务开始前,机器需要启动时间S,而完成这批任务所需的时间是各个任务需要时间的...

aodanchui1057的博客 185

一次请求穿过的六道关卡:微服务基础组件的通信与IO、事件驱动、负载均衡、服务路由、API网关与配置协调

微服务的稳定性往往取决于看不见的基础组件。本文跟随一次下单请求,依次穿过API网关、服务路由、负载均衡与服务通信,再沿事件分支扇出,并从控制面审视配置中心。通信层剖析握手成本、连接复用、epoll与主从Reactor、心跳判活、退避抖动、截止时间与重试预算;事件层讲解编舞与编排、事务发件箱和幂等消费;均衡与路由对比静态与动态算法、路由链、全链路灰度与同区保底;网关讨论过滤器链与限流算法;配置部分给出四类配置、长轮询与共识协调,最后归纳五道防线。文中关键数据均来自可在Java8运行的演示程序。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 172万+

Triton server的部署、构建、backend插件机制代码梳理、模型加载、自定义C++backend流程

Triton inference server的部署、构建、backend机制代码详细梳理、模型加载过程、自定义C++backend流程.

C/C++、嵌入式开发、深度学习算法、模型部署与推理优化 472

bzoj2726 [SDOI2012]任务安排(斜率优化+cdq分治)

bzoj2726 [SDOI2012]任务安排 原题地址:http://www.lydsy.com/JudgeOnline/problem.php?id=2726 题意: 机器上有N个需要处理的任务,它们构成了一个序列。这些任务被标号为1到N,因此序列的排列为1,2,3…N。这N个任务被分成若干批,每批包含相邻的若干任务。从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间是Ti。

Bfk的博客 685

MediaPipe 教程:从安装到应用-全网最全

MediaPipe是Google推出的开源框架,专为构建机器学习管道设计,可以高效处理视频、音频等时间序列数据。本文教程从安装到应用逐步讲解: 安装步骤简单,只需通过pip安装mediapipe包并验证版本; 重点演示人体姿态检测功能,可识别33个身体关键点; 提供基础代码实现,包括视频捕获、关键点检测与可视化; 强调模块化开发,将功能封装成类以提高代码复用性。 教程适合初学者,通过清晰指引和实用代码示例,帮助快速实现计算机视觉应用。

FJN110的博客 1563

bzoj2726: [SDOI2012]任务安排 斜率优化Dp+cdq分治

bzoj2726: [SDOI2012]任务安排 Description 机器上有N个需要处理的任务,它们构成了一个序列。这些任务被标号为1到N,因此序列的排列为1,2,3…N。这N个任务被分成若干批,每批包含相邻的若干任务。从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间是Ti。在每批任务开始前,机器需要启动时间S,而完成这批任务所需的时间是各个任务需要时间的总和。注意,同...

maxtir的博客 438

061、LQR(线性二次型调节器)控制基础

本文介绍了LQR(线性二次型调节器)控制在飞控系统中的应用。作者通过一次四旋翼炸机事故引出PID控制的局限性,详细讲解了LQR的数学原理、权重矩阵的物理意义以及实际工程实现方法。文章对比了LQR与PID的控制效果,指出LQR在鲁棒性方面的优势,同时也分析了其存在稳态误差等缺点。最后总结了LQR在飞控中的适用场景,建议将LQR与PID结合使用,并预告了下一章将讨论带积分项的LQI控制。全文包含具体案例、代码实现和调参经验,为飞控算法开发者提供了实用指导。

2401_88858637的博客 719

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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

[bzoj 2726] 任务安排 (斜率优化 线性dp) 3月14日第三题!!!(虽然是15号发的qwq) Description 机器上有N个需要处理的任务,它们构成了一个序列。这些任务被标号为1到N,因此序列的排列为1,2,3…N。这N个任务被分成若干批,每批包含相邻的若干任务。从时刻0开始,这些任务被分批...

Tricksterism 216

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

[bzoj P2726] [SDOI2012]任务安排

[bzoj P2726] [SDOI2012]任务安排 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1204 Solved: 349[Submit][Status][Discuss]Description 机器上有N个需要处理的任务,它们构成了一个序列。这些任务被标号为1到N,因此序列的排列为1,2,3...N。这N个任务被...

a8233821的博客 197

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Bzoj 2726 SDOI 任务安排

Memory Limit:131072KB 64bit IO Format:%lld & %llu Description 机器上有N个需要处理的任务,它们构成了一个序列。这些任务被标号为1到N,因此序列的排列为1,2,3...N。这N个任务被分成若干批,每批包含相邻的若干任务。从时刻0开始,这些任务被分批加工,...

dezhen7015的博客 167

【BZOJ 2726】任务安排【斜率优化dp】

题意:        n个需要被处理的任务,机器启动时间为s。每个任务都有时间Ti和花费Ci,计算方法为完成这批任务所需的时间是各个任务需要时间的总和。注意,同一批任务将在同一时刻完成,新的一批任务开始时,机器需要重新启动。确定一个分组方案,使得总费用最小。【每批任务包含相邻的若干任务】   思路:        1  &lt;= n &lt;= 3*1e5,0 &lt;= S,Ci &l...

lucius-liu.cn 419

BZOJ2726 [SDOI2012]任务安排

[] It must be true that today isn't suitable for coding. [Solution]

_laekov 1704

[BZOJ2726][SDOI2012]任务安排

bzoj luogu(洛谷上面的是个\(O(n^2)\)题) description 有\(n\)个任务,每次可以同时处理一段连续的任务,这些任务将同时处理完,且所需时间等于这些任务单独处理的总时间。每次处理任务前,机器需要\(S\)的时间准备。每个任务还有一个费用系数,这个任务的费用等于它的完成时刻乘上费用系数。求最小代价。 \(n\le3\times10^5\)。 sol 怎么\(d...

abcyan1235的博客 146

[bzoj2726][DP]任务安排

Description 机器上有N个需要处理的任务,它们构成了一个序列。这些任务被标号为1到N,因此序列的排列为1,2,3…N。这N个任务被分成若干批,每批包含相邻的若干任务。从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间是Ti。在每批任务开始前,机器需要启动时间S,而完成这批任务所需的时间是各个任务需要时间的总和。注意,同一批任务将在同一时刻完成。每个任务的费用是它的完成...

Rose_max的博客 325

bzoj 2726 任务安排

题目大意: 机器上有N个需要处理的任务,它们构成了一个序列 把这些任务分成若干批 从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间是Ti 在每批任务开始前,机器需要启动时间S,而完成这批任务所需的时间是各个任务需要时间的总和 注意,同一批任务将在同一时刻完成每个任务的费用是它的完成时刻乘以一个费用系数Fi 请确定一个分组方案,使得总费用最小 思路: 设dp数组表示前i...

weixin_30455067的博客 81

BZOJ2726 SDOI2012 任务安排

题目 机器上有N个需要处理的任务,它们构成了一个序列。这些任务被标号为1到N,因此序列的排列为1,2,3...N。这N个任务被分成若干批,每批包含相邻的若干任务。从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间是Ti。在每批任务开始前,机器需要启动时间S,而完成这批任务所需的时间是各个任务需要时间的总和。注意,同一批任务将在同一时刻完成。每个任务的费用是它的完成时刻乘以一个费用系数F...

weixin_30871701的博客 144
上一篇: hdu5977 Garden of Eden
下一篇: ACdream - 1157 Segments
我不会额
博客等级 码龄11年 2粉丝 173原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值