洛谷P2365 任务安排 [解法一]】的更多相关文章

题目描述 N个任务排成一个序列在一台机器上等待完成(顺序不得改变),这N个任务被分成若干批,每批包含相邻的若干任务.从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间是Ti.在每批任务开始前,机器需要启动时间S,而完成这批任务所需的时间是各个任务需要时间的总和(同一批任务将在同一时刻完成).每个任务的费用是它的完成时刻乘以一个费用系数Fi.请确定一个分组方案,使得总费用最小. 例如:S=1:T={1,3,4,2,1}:F={3,2,3,3,4}.如果分组方案是{1,2}.{3}.{4…
洛谷题目链接:任务安排 题目描述 N个任务排成一个序列在一台机器上等待完成(顺序不得改变),这N个任务被分成若干批,每批包含相邻的若干任务.从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间是Ti.在每批任务开始前,机器需要启动时间S,而完成这批任务所需的时间是各个任务需要时间的总和(同一批任务将在同一时刻完成).每个任务的费用是它的完成时刻乘以一个费用系数Fi.请确定一个分组方案,使得总费用最小. 例如:S=1:T={1,3,4,2,1}:F={3,2,3,3,4}.如果分组方案是…
P2365 任务安排 题目描述 N个任务排成一个序列在一台机器上等待完成(顺序不得改变),这N个任务被分成若干批,每批包含相邻的若干任务.从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间是Ti.在每批任务开始前,机器需要启动时间S,而完成这批任务所需的时间是各个任务需要时间的总和(同一批任务将在同一时刻完成).每个任务的费用是它的完成时刻乘以一个费用系数Fi.请确定一个分组方案,使得总费用最小. 例如:S=1:T={1,3,4,2,1}:F={3,2,3,3,4}.如果分组方案是{…
解法一:http://www.cnblogs.com/SilverNebula/p/5926253.html 解法二:斜率优化 在解法一中有这样的方程:dp[i]=min(dp[i],dp[j]+(sumf[i]-sumf[j])*sumt[i]+s*(sumf[n]-sumf[j]) ) 其中min的后半部分,也就是dp[j]+(sumf[i]-sumf[j])*sumt[i]+s*(sumf[n]-sumf[j]) 计算了将j~i分为一组的花费(以及提前计算的受影响花费) 设f(j)=dp[…
传送门 思路: 最朴素的dp式子很好考虑:设\(dp(i,j)\)表示前\(i\)个任务,共\(j\)批的最小代价. 那么转移方程就有: \[ dp(i,j)=min\{dp(k,j-1)+(sumT_i+S*j)*(sumC_i-sumC_k)\} \] 为什么有个\(S*j\)呢,因为前面的批次启动会对后面的答案有影响. 但是分析复杂度是\(O(n^3)\)的,肯定不行. 考虑一下为什么需要第二个状态呢?是为了消除后效性,因为后面的状态不知道总共启动了几次. 但我们可以把费用提前计算,一次启…
其实是可以斜率优化的但是没啥必要 设st为花费时间的前缀和,sf为Fi的前缀和,f[i]为分组到i的最小花费 然后枚举j转移,考虑每次转移都是把j到i分为一组这样意味着j及之后的都要增加s的时间,同时增加这段的结束时间/*F,取min即可 #include<iostream> #include<cstdio> using namespace std; const int N=5005,inf=1e9; int n,s,st[N],sf[N],f[N]; int read() { i…
最开始,笔者将状态 fif_{i}fi​ 定义为1到i的最小花费 ,我们不难得到这样的一个状态转移方程,即 fi=(sumti−sumtj+S+Costj)∗(sumfi−sumfj)f_{i}=(sumt_{i}-sumt_{j}+S+Cost_{j})*(sumf_{i}-sumf_{j})fi​=(sumti​−sumtj​+S+Costj​)∗(sumfi​−sumfj​) . 可是我们发现这时 CostjCost_{j}Costj​ 非常不好算,而且当前的决策还会对后面的决策产生影响,…
3月14日第二题!! 题目描述 N个任务排成一个序列在一台机器上等待完成(顺序不得改变),这N个任务被分成若干批,每批包含相邻的若干任务.从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间是Ti.在每批任务开始前,机器需要启动时间S,而完成这批任务所需的时间是各个任务需要时间的总和(同一批任务将在同一时刻完成).每个任务的费用是它的完成时刻乘以一个费用系数Fi.请确定一个分组方案,使得总费用最小. 例如:S=1:T={1,3,4,2,1}:F={3,2,3,3,4}.如果分组方案是{…
任务安排1(小数据):https://www.luogu.com.cn/problem/P2365 任务安排2(大数据):https://www.luogu.com.cn/problem/P5785 题目描述 有 \(N\) 个任务排成一个序列在一台机器上等待执行,它们的顺序不得改变.机器会把这 \(N\) 个任务分成若干批,每一批包含连续的若干个任务.从时刻 \(0\) 开始,任务被分批加工,执行第 \(i\) 个任务所需的时间是 \(T_i\).另外,在每批任务开始前,机器需要 \(S\)…
我对模拟的理解:https://www.cnblogs.com/AKMer/p/9064018.html 题目传送门:https://www.luogu.org/problemnew/show/P1619 写完后我觉得我该告诉大家的第一句话就是: 不要深夜在洛谷写这种蓝色难度的模拟题(当然您如果够神写深蓝色难度的也是体会不到我这种蒟蒻今晚尝到的痛苦的.) 这题写的我真是有一种"日了出题人亲娘"爽快的感觉 换行就是这题最难的模拟,一下要换,一下不要换,特殊情况要特判. 然后判质数和分解质…
题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进队列,这时队列中只有他一个人: 2.2-N号同学依次入列,编号为i的同学入列方式为:老师指定编号为i的同学站在编号为1-i -1中某位同学(即之前已经入列的同学)的左边或右边: 3.从队列中去掉M(M<N)个同学,其他同学位置顺序不变. 在所有同学按照上述方法队列排列完毕后,老师想知道从左到右所有同学的编号. 输入输出格式 输入格式: 输入文件arrange.in的第1行为一个正整数N…
座位安排 今天,在机房里做了这道题目,我来整理一下思路. 首先读懂题意,这n个人是不需要按1到n来一次安排的,也就是说你可以先安排任意一个人. 那么有一种很好排除的情况,那就是对于大于等于i的作为的需求量s[i]是不得超过n-i+1的,这个很好理解. 那么这个s[i]我们可以在读入内定的几个位置时,用一个叫use[i]的数组去处理,它表示内定为i的人有多少个,那么s[]也就出来了. 接下来我们需要预处理一下组合数,以后需要. 下面我们看一下核心,这道题目我们用的时dp 我们用f[i][j]表示对…
题目描述 一个学校里老师要将班上 NNN 个同学排成一列,同学被编号为 $1-N$ ,他采取如下的方法: 先将 111 号同学安排进队列,这时队列中只有他一个人: 2−N2-N2−N 号同学依次入列,编号为i的同学入列方式为:老师指定编号为i的同学站在编号为 1−(i−1)1-(i -1)1−(i−1) 中某位同学(即之前已经入列的同学)的左边或右边: 3.从队列中去掉 M(M<N)M(M<N)M(M<N) 个同学,其他同学位置顺序不变. 在所有同学按照上述方法队列排列完毕后,老师想知道…
P2071 座位安排 seat.cpp/c/pas 题目背景 公元二零一四年四月十七日,小明参加了省赛,在一路上,他遇到了许多问题,请你帮他解决. 题目描述 已知车上有N排座位,有N*2个人参加省赛,每排座位只能坐两人,且每个人都有自己想坐的排数,问最多使多少人坐到自己想坐的位置. 输入输出格式 输入格式: 第一行,一个正整数N. 第二行至第N*2+1行,每行两个正整数Si1,Si2,为每个人想坐的排数. 输出格式: 一个非负整数,为最多使得多少人满意. 输入输出样例 输入样例#1: 复制 4…
题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进队列,这时队列中只有他一个人: 2.2-N号同学依次入列,编号为i的同学入列方式为:老师指定编号为i的同学站在编号为1-i -1中某位同学(即之前已经入列的同学)的左边或右边: 3.从队列中去掉M(M<N)个同学,其他同学位置顺序不变. 在所有同学按照上述方法队列排列完毕后,老师想知道从左到右所有同学的编号. 输入输出格式 输入格式: 输入文件arrange.in的第1行为一个正整数N…
题目:https://www.luogu.org/problemnew/show/P2312 https://www.lydsy.com/JudgeOnline/problem.php?id=3751 10^10000 太大了,高精度也很难做,怎么办? 注意我们要求的是方程的值 = 0 的解,不妨在取模意义下做,因为真正使方程 = 0 的解在模意义下也是 0: 然后可以用秦九韶算法,O(n) 算每个枚举的答案: 避免出错要多对几个数取模,就像哈希时有多个模数一样: 据说模数大小在 2e4 左右比…
P2071 座位安排 seat.cpp/c/pas 题目背景 公元二零一四年四月十七日,小明参加了省赛,在一路上,他遇到了许多问题,请你帮他解决. 题目描述 已知车上有N排座位,有N*2个人参加省赛,每排座位只能坐两人,且每个人都有自己想坐的排数,问最多使多少人坐到自己想坐的位置. 输入输出格式 输入格式: 第一行,一个正整数N. 第二行至第N*2+1行,每行两个正整数Si1,Si2,为每个人想坐的排数. 输出格式: 一个非负整数,为最多使得多少人满意. 输入输出样例 输入样例#1: 复制 4…
Problem P2312 [解方程] >>> record 用时: 1166ms 空间: 780KB(0.76MB) 代码长度: 2.95KB 提交记录: R9909587 >>> 注: 使用了 o1 优化 o2 优化 o3 优化 快读快输 >>> Solution 30 pts 枚举,使用 int,直接按题目所说暴力乱搞一通 Unaccepted 30 Ac:3 Wa:7 50 pts ∣a_i∣≤10^10000 所以高精度. 然而慢的一皮: U…
题目 任务调度贪心. 需要明确一点,任务调度贪心题,并不是简单地应用排序的贪心,而是动态的运用堆,使每次选择是都能保持局部最优,并更新状态使得下次更新答案可以取到正确的最小值. 这是A过程的解. 然后考虑B过程则需要从最后的物体开始操作,可以使时间最小,取每个物体最后完成的最大值.而且使每个物体都花费最小时间,总的时间肯定也是最小的. #include <bits/stdc++.h> using namespace std; int n, m1, m2, ans[1000010], ans2;…
P1771 方程的解 都知道这个题可以用隔板法做 把这个\(g(x)\)想象为.....\(g(x)\)个苹果? 因为解是正整数,所以给这些"苹果"分组的时候每组最少有一个 然后我们在这\(g(x)\)个苹果形成的\(g(x)-1\)个空隙中插入\(k-1\)个板就把它分成了\(k\)组 所以答案是\(\binom{g(x)-1}{k-1}\) 然而组合数要用到除法,这题又要高精 不过高精除低精好像也没有很难,莫名恐惧 我们可以给每个数质因数分解,记录每个质因数出现次数,乘法时加一,除…
题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进队列,这时队列中只有他一个人: 2.2-N号同学依次入列,编号为i的同学入列方式为:老师指定编号为i的同学站在编号为1-i -1中某位同学(即之前已经入列的同学)的左边或右边: 3.从队列中去掉M(M<N)个同学,其他同学位置顺序不变. 在所有同学按照上述方法队列排列完毕后,老师想知道从左到右所有同学的编号. 输入输出格式 输入格式: 输入的第1行为一个正整数N,表示了有N个同学. 第…
∵每个座位可以坐俩人,所以拆点最大匹配. #include<cstdio> #include<vector> #include<cstring> using namespace std; #define N 2001 vector<]; typedef vector<int>::iterator ITER; ]; ]; int n,x,y; bool dfs(int U) { for(ITER it=G[U].begin();it!=G[U].end(…
题目背景 公元二零一四年四月十七日,小明参加了省赛,在一路上,他遇到了许多问题,请你帮他解决. 题目描述 已知车上有N排座位,有N*2个人参加省赛,每排座位只能坐两人,且每个人都有自己想坐的排数,问最多使多少人坐到自己想坐的位置. 输入输出格式 输入格式: 第一行,一个正整数N. 第二行至第N*2+1行,每行两个正整数Si1,Si2,为每个人想坐的排数. 输出格式: 一个非负整数,为最多使得多少人满意. 输入输出样例 输入样例#1: 4 1 2 1 3 1 2 1 3 1 3 2 4 1 3 2…
题目:https://www.luogu.org/problemnew/show/P2312 https://www.lydsy.com/JudgeOnline/problem.php?id=3751 惭愧……先听了同学讲它,又看了题解,才A. 取一些模数就能限制时间复杂度并有一些概率正确.取模后常数也能取模,就不用高精度了!而且m以内的数只用算 0~模数-1 的值,表示取模后是该值的数在模该值意义下答案是否为0. bzoj上的数据需要精心选取模数.据说2e4左右的效果最好?试了几次终于A了.…
https://www.luogu.org/problemnew/show/P4452 又一道看题解的费用流. 注意时间也影响节点,像题解那样建边就少很多了. #include<bits/stdc++.h> using namespace std; +; ; const int INF=0x3f3f3f3f; struct Edge{ int to,next,cap,flow,cost; }edge[MAXM]; int head[MAXN],tol; int pre[MAXN],dis[MA…
题目描述 佳佳碰到了一个难题,请你来帮忙解决. 对于不定方程a1+a2+…+ak-1+ak=g(x),其中k≥2且k∈N,x是正整数,g(x)=x^x mod 1000(即x^x除以1000的余数),x,k是给定的数.我们要求的是这个不定方程的正整数解组数. 举例来说,当k=3,x=2时,分别为(a1,a2,a3)=(2,1,1)'(1,2,1),(1,1,2). 输入输出格式 输入格式: 输入文件equation.in有且只有一行,为用空格隔开的两个正整数,依次为k,x. 输出格式: 输出文件…
#include<bits/stdc++.h> using namespace std; ]; list<int> stus; list<];//用来存放每一项的迭代器 这样遍历链表的时间能从O(n)变成O(1) int main(){ int n; scanf("%d",&n); stus.push_front();//插入1到头部 pos[] = stus.begin();//放入迭代器的开始 相当于存入的位置在哪里 ;i <= n;i+…
洛谷题目传送门 正解是树状数组维护dfn序上的前缀和,这样的思路真是又玄学又令我惊叹( 我太弱啦,根本想不到)Orz各路Dalao 今天考了这道题,数据范围还比洛谷的小,只有\(10^5\)(害我复制粘贴一波交上去RE),让我很放心地去想树剖了. 然而尴尬的是我不会树剖,却先学了LCT(再次暴露蒟蒻的本性) 树剖的模型是,把土路视为权值,有修改,然后要查询某节点到根节点的权值和.没有换根的话,边权直接视为点权. 然后我干脆直接用Splay维护链剖分算啦(其实就是弱化板的LCT,有点像我弹飞绵羊的…
(清明培训qwq,明天就要回学校了qwq拒绝) 行吧我洛谷都四天没碰了 解方程[传送门] 算法标签: (作为一个提高+省选-的题) 丁大佬真的很有幽默感emmm: #include <cstdio> ; + ; ; int N, M; int arr[maxN]; void Fscan(int &tmpX) { int Ch = getchar(), F = ' '; ; ') { F = Ch; Ch = getchar(); } ') { tmp = ((tmp <<…
本题的Splay写法(无指针Splay超详细) 前言 首先来讲...终于调出来了55555...调了整整3天..... 看到大部分大佬都是用指针来实现的Splay.小的只是按照Splay的核心思想和原理来进行的.可能会有不妥之处,还请大佬们指出,谢谢! 那么这个题解存在的意义就是让不会敲Splay的人额...会敲Splay啦... 基本思想 数据结构 对于Splay,我定义了一个class类(当成struct就行啦...个人习惯不同啦),定义名称为“Splay”. 之后在类中,我定义了Splay…