CF1101F Trucks and Cities】的更多相关文章

题意:给定线段上n个特殊点,m次询问. 每次询问:在第l个点到第r个点这一段区间中选出k个点,将其分成k + 1段.使得最长的段尽量短. 输出这m个询问中答案最大的. n<=400,m<=250000 解:显然有个暴力DP是n4的.f[l][r][k]表示把[l, r]分成k段的最短长度. 然后我们发现一件事: 考虑j增加的时候,这个东西左半边单增,右半边单减.于是这个东西对于j是个凸的. 还发现r增大的时候,j一定不会减少. 然后枚举l和k,r递增的同时让一个指针j跟着增加.这样就是n3DP…
分析 好像是有一个叫这个名字的算法,链接. 令\(f[i][j][k]\)表示一辆每公里耗油量为\(1\)的货车从\(i\)到\(j\)中途加\(k\)次油最小的油箱容量.枚举所有的起点和中途加油的次数,这样就固定了两维,显然有DP方程: \[ f[i][j][k]= \min_{p=i}^{j} ( \max (f[i][p][k-1],a[j]-a[p])) \] 根据生活经验题意显然这个DP具有决策单调性,可以用分治优化一下. 具体来说就是每次大力求出\(mid=(l+r)/2\)的决策点…
Trucks and Cities 一个很显然的做法就是二分然后对于每个车贪心取check, 这肯定会TLE, 感觉会给人一种贪心去写的误导... 感觉有这个误导之后很难往dp那个方向靠.. dp[ k ][ i ][ j ]表示把 i, j 这个区间分成 k 段, 所有段的最大值的最小值为多少. 然后dp的过程中把车代进去求答案. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #…
题目分析: 2500的题目为什么我想了这么久... 考虑答案是什么.对于一辆从$s$到$t$的车,它有$k$次加油的机会.可以发现实际上是将$s$到$t$的路径以城市为端点最多划分为最大长度最小的$k+1$段.不难发现这样做一定是最优的. 设计DP状态$f[i][j][k]$表示将第$i$座城市到第$j$座城市的路径划分为$k$段.朴素的DP方程是: $$f[i][j][k] = min(max(f[i][x][k-1],a[j]-a[x])),(which)x \in [i,j]$$ 这个DP…
题目传送门 题意简述:(来自洛谷) 有n个城市坐落在一条数轴上,第ii个城市位于位置ai​. 城市之间有m辆卡车穿行.每辆卡车有四个参数:si​为起点编号,fi​为终点编号,ci​表示每行驶1个单位长度需要消耗的油量,ri​表示可以在路途中加油的次数. 当卡车到达一个城市的时候可以将油加满(当然也可以不加),在路中无法加油,但是路途中总加油次数不能超过ri​. 所有卡车的油箱都是一样大的,我们称它的容积为V.试求一个最小的V,使得对于所有的卡车都存在一种方案,在路途中任意时刻油箱内的油量大于等于…
D. GCD Counting 题意: 给出n个点的树,每个点有一个权值,找出一条最长的路径使得路径上所有的点的gcd>1 题解: gcd>1的一定不会有很多.所以暴力搞一下就行,不需要点分治. #include <cstdio> #include <algorithm> #include <iostream> #include <cstring> #include <map> using namespace std; ; *maxn…
目录 Educational Codeforces Round 58 (Rated for Div. 2) A. Minimum Integer B. Accordion C. Division and Union D.GCD Counting E.Polycarp's New Job F.Trucks and Cities G.(Zero XOR Subset)-less A,B,C,D,E都是几个月前写的..现在终于把这个坑填上了qwwwwq Educational Codeforces R…
A. Minimum Integer 签到. #include <bits/stdc++.h> using namespace std; #define ll long long ll l, r, d; int main() { int t; scanf("%d", &t); while (t--) { scanf("%lld%lld%lld", &l, &r, &d); if (d < l) printf(&quo…
A. Minimum Integer 水 #include<bits/stdc++.h> #define clr(a,b) memset(a,b,sizeof(a)) using namespace std; typedef long long ll; ; struct node{ ll num,mag; friend bool operator <(const node &a,const node &b){ return a.mag>b.mag; } }a[max…
Connect the Cities Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 18322 Accepted Submission(s): 4482 Problem DescriptionIn 2100, since the sea level rise, most of the cities disappear. Though some…