【Luogu】P1594护卫队(前缀和+DP)】的更多相关文章

(luogu P1594) 护卫队 题目链接 https://www.luogu.org/problemnew/show/P1594 很好的一个模型 题目大意 有一个有序的车队,要求将其分成若干段,每段速度为该段车速度最小值,每段车的重量之和不能超过一定值,求最快通过桥的时间. 题解 首先想想怎么dp 设f[i]为前i辆车通过桥所需要的最小时间 就有一个\(n^2\)的暴力了 到一个点往前去找 看看这一段重量是否在范围内 如果在就更新答案 如果不再就不找了(从后往前找,如果继续去找那么重量只会更…
P1594 护卫队 题目描述 护卫车队在一条单行的街道前排成一队,前面河上是一座单行的桥.因为街道是一条单行道,所以任何车辆都不能超车.桥能承受一个给定的最大承载量.为了控制桥上的交通,桥两边各站一个指挥员.护卫车队被分成几个组,每组中的车辆都能同时通过该桥.当一组车队达到了桥的另一端,该端的指挥员就用电话通知另一端的指挥员,这样下一组车队才能开始通过该桥.每辆车的重量是已知的.任何一组车队的重量之和不能超过桥的最大承重量.被分在同一组的每一辆车都以其最快的速度通过该桥.一组车队通过该桥的时间是…
我的天,,,,,n=8,k<=15,,,这怕不是暴力DP+高维数组.... 开一个五维数组f[k][i][j][p][q]表示从(i,j)到(p,q)中分成k个矩形最小的平方和. 然后初始化时用上二维前缀和 DP时有些像区间DP,枚举分割线,分成两部分,取min就好 #include<cstdio> #include<iostream> #include<cstring> #define R register int #define For(i,a,b) for(…
TM搞了半天的二维DP方程还是错的. 这是题目链接: 设f[i]表示前i辆车顺利通过的最小时间. 则对于每一个i枚举该组车的起点j,然后从所有的f[j]+Min[j][i]中选一个最小的. Min[j][i]表示从第j辆车到第i辆车最慢的是个什么速度. #include<cstdio> #include<cctype> #include<cstring> #include<algorithm> using namespace std; inline long…
题面 好久没写博客了..最近新学了CDQ...于是就来发一发一道CDQ的练习题 看上去就是可以dp的样子. 设\(dp_{i}\)为以i结尾的最长不下降序列. 易得:\(dp_{i}\)=\(max(dp_{j})+1\)\((j<=i\)&&\(Max_{j}<=a_{i}\)&&\(a_{j}<=Min_{i})\) \(Max_{i}\)和\(Min_{i}\)表示第i个点所有变化中的最大值和最小值. 我们考虑用一个什么东西来维护这个dp. 我的第一…
Description   部队中共有N个士兵,每个士兵有各自的能力指数Xi,在一次演练中,指挥部确定了M个需要防守的地点,按重要程度从低到高排序,依次以数字1到M标注每个地点的重要程度,指挥部将选择M个士兵依次进入指定地点进行防守任务,能力指数为X的士兵防守重要程度为Y的地点将得到X*Y的参考指数.现在士兵们排成一排,请你选择出连续的M个士兵依次参加防守,使得总的参考指数值最大. Input 输入包含多组数据. 输入第一行有两个整数N,M(1<=N<=1000000,1<=M<=…
题意 有n个车站,现在有一辆火车从1到n驶过,给出aij代表从i站上车j站下车的人的个数.列车行驶过程中你有K次检票机会,所有当前在车上的人会被检票,问最多能检多少个不同的人的票 (n<=600,k<=50) 题解 一开始没啥思路,然后瞄了一眼题解.看到了前缀和然后就想前缀和的意义. 结果又没什么收获.绝望之际想到我瞄的那一眼,看到矩阵是倒着的,然后就有了思路. DP也就轻而易举地想出来了. 我们建立以左上为原点的前缀和. 然后sum[i][i+1]表示的就是经过i号站点的人数. 然后dp[i…
题目描述 护卫车队在一条单行的街道前排成一队,前面河上是一座单行的桥.因为街道是一条单行道,所以任何车辆都不能超车.桥能承受一个给定的最大承载量.为了控制桥上的交通,桥两边各站一个指挥员.护卫车队被分成几个组,每组中的车辆都能同时通过该桥.当一组车队达到了桥的另一端,该端的指挥员就用电话通知另一端的指挥员,这样下一组车队才能开始通过该桥.每辆车的重量是已知的.任何一组车队的重量之和不能超过桥的最大承重量.被分在同一组的每一辆车都以其最快的速度通过该桥.一组车队通过该桥的时间是用该车队中速度最慢的…
传送门 思路 这么一道签到题竟然没切掉真是丢人呢-- 首先有一个\(O(3^n)\)的SB方法,记录\(dp_{S,T}\)表示已经填进去了\(S\),当前最大前缀和集合为\(T\),随便转移.太简单了就不细讲了. 挖掘一下题目的性质:一个序列必然可以被分成两部分:前面的前缀和&后面的部分. 后面的部分满足一个性质:任意前缀和都<0,所以很容易DP. 前面可以考虑每次往数列前面加数,那么就必须要满足原来的数列总和\(\ge 0\),也很容易DP,具体可以见代码. 然后就做完了--我这都不会真…
链接: https://www.luogu.org/problemnew/show/P1115 题面: 题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入输出格式 输入格式: 第一行是一个正整数NN,表示了序列的长度. 第二行包含NN个绝对值不大于1000010000的整数A_iAi​,描述了这段序列. 输出格式: 一个整数,为最大的子段和是多少.子段的最小长度为11. 输入输出样例 输入样例#1: 复制 7 2 -4 3 -1 2 -4 3 输出样例#1: 复制 4 说明…