https://codeforces.com/contest/1101/problem/F

题意

有n个城市,m辆卡车,每辆卡车有起点\(s_i\),终点\(f_i\),每公里油耗\(c_i\),可加油次数\(r_i\),每辆卡车的油箱大小一样,每次加油都会加满,在城市之间不能加油,问最小油箱大小能满足每辆卡车顺利到达终点

题解

  • n<=400,m<=250000,考虑离线处理出任意两个城市能加油k次的最小油耗,然后对于每辆卡车询问
  • 定义dp[l][r][k]为区间[l,r]能分成(k+1)段各段的最小值
  • \(dp[l][r][k]=min(max(dp[l][i][k-1],a[r]-a[i])),l \leq i \leq r\),\(O(n^4)\),会超时
  • 观察一下,\(dp[l][i-1][k-1]\leq dp[l][i][k-1]\),\((a[r]-a[i-1]) \geq (a[r]-a[i])\)
  • 即随着i的增加,max()的左边越来越大,右边越来越小,那么min()的点一定在\(dp[l][i][k-1]\)和\(a[r]-a[i]\)最接近的时候,队列维护一下,\(O(n^3)\)
  • 然后滚掉第一维,空间\((n^2)\),对于每个\(s_i\)离线处理
  • 注意dp初始化问题

代码

#include<bits/stdc++.h>
#define ll long long
#define MAXN 500005
using namespace std;
struct N{
ll t,c,r;
N(ll t=0,ll c=0,ll r=0):t(t),c(c),r(r){}
};
vector<N>G[MAXN];
ll a[505],dp[505][505],s,t,c,r,ans;
int n,m;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=m;i++){
scanf("%lld%lld%lld%lld",&s,&t,&c,&r);
G[s].push_back(N(t,c,r));
}
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
dp[j][0]=a[j]-a[i];
int p=i;
for(int k=1;k<=n;k++){
dp[j][k]=a[j]-a[i];
while(p+1<=j&&dp[p+1][k-1]<=a[j]-a[p+1])p++;
dp[j][k]=min(dp[j][k],min(dp[p+1][k-1],a[j]-a[p]));
}
}
for(auto u:G[i])
ans=max(dp[u.t][u.r]*u.c,ans);
}
cout<<ans;
}

Educational Codeforces Round 58 (Rated for Div. 2) F dp + 优化(新坑) + 离线处理的更多相关文章

  1. Educational Codeforces Round 58 (Rated for Div. 2) 题解

    Educational Codeforces Round 58 (Rated for Div. 2)  题目总链接:https://codeforces.com/contest/1101 A. Min ...

  2. Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings

    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings 题目连接: http://cod ...

  3. Educational Codeforces Round 71 (Rated for Div. 2)-F. Remainder Problem-技巧分块

    Educational Codeforces Round 71 (Rated for Div. 2)-F. Remainder Problem-技巧分块 [Problem Description] ​ ...

  4. Educational Codeforces Round 58 (Rated for Div. 2) D 树形dp + 数学

    https://codeforces.com/contest/1101/problem/D 题意 一颗n个点的树,找出一条gcd>1的最长链,输出长度 题解 容易想到从自底向长转移 因为只需要g ...

  5. Educational Codeforces Round 58 (Rated for Div. 2) G 线性基

    https://codeforces.com/contest/1101/problem/G 题意 一个有n个数字的数组a[],将区间分成尽可能多段,使得段之间的相互组合异或和不等于零 题解 根据线性基 ...

  6. Educational Codeforces Round 58 (Rated for Div. 2)

    A. Minimum Integer 水 #include<bits/stdc++.h> #define clr(a,b) memset(a,b,sizeof(a)) using name ...

  7. Educational Codeforces Round 58 (Rated for Div. 2) (前两题题解)

    感慨 这次比较昏迷最近算法有点飘,都在玩pygame...做出第一题让人hack了,第二题还昏迷想错了 A Minimum Integer(数学) 水题,上来就能做出来但是让人hack成了tle,所以 ...

  8. Educational Codeforces Round 50 (Rated for Div. 2) F - Relatively Prime Powers(数学+容斥)

    题目链接:http://codeforces.com/contest/1036/problem/F 题意: 题解:求在[2,n]中,x != a ^ b(b >= 2 即为gcd)的个数,那么实 ...

  9. Educational Codeforces Round 42 (Rated for Div. 2)F - Simple Cycles Edges

    http://codeforces.com/contest/962/problem/F 求没有被两个及以上的简单环包含的边 解法:双联通求割顶,在bcc中看这是不是一个简单环,是的话把整个bcc的环加 ...

随机推荐

  1. AHA高级心血管生命支持ACLS课前自我评估测试

    AHA高级心血管生命支持ACLS课前自我评估测试 答题人:a   成绩单 您的得分:17.5 分 答对题数:7 题 您的名次:47 名 问卷满分:100 分 测试题数:40 题 参与人次:47 人   ...

  2. linux上如何设置网络,出现connect: network is unreachable 的问题。

    发现有网友问有关ping命令出现connect: network is unreachable 的问题. 这通常是因为没正确设置ip地址. 解决方法: 在确保完善网卡驱动,以及确保将网卡驱动编译进内核 ...

  3. Java运行时数据区

    目录 1. 概述 2. Java内存结构 3. 程序计数器 4. Java虚拟机栈 5. 本地方法栈 6. 堆 7. 方法区 8. 运行时常量池 9. 直接内存 10. 总结 1. 概述 作为日常的J ...

  4. Linux yum源

    (一)yum源概述 yum需要一个yum库,也就是yum源.默认情况下,CentOS就有一个yum源.在/etc/yum.repos.d/目录下有一些默认的配置文件(可以将这些文件移到/opt下,或者 ...

  5. LR基本知识学习

    性能测试基础 本质:基于 协议 模拟用户发请求,对服务器形成一定的负载,来测试服务器的性能指标是否满足要求,与界面无关 * 时间 * 空间 分类: 性能(狭义):特定条件下,验证  系统是否有宣称具有 ...

  6. 反射调用DLL

    public static type GetClassType(string ClassName,string dllname) { Type ClassType =null; foreach(Ass ...

  7. Java相关查询记录

    Version of Spring Facet could not be detected. http://yijiesuifeng.iteye.com/blog/2221444

  8. java第六章异常

    异常: 程序运行一旦出现异常程序就会立刻结束不在向下运行 处理异常:在程序执行代码时,万一发生了异常,程序会按照处理的方法对一场进行处理办法,程序将继续执行 try-catch-finally-thr ...

  9. poj2777(线段树)

    题目链接:https://vjudge.net/problem/POJ-2777 题意:有L块连续的板子,每块板子最多染一种颜色,有T种(<=30)颜色,刚开始将所有板子染成颜色1,O次操作(包 ...

  10. Java多线程02(线程安全、线程同步、等待唤醒机制)

    Java多线程2(线程安全.线程同步.等待唤醒机制.单例设计模式) 1.线程安全 如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运行结果和单线程运行的结果是一样的,而且其他的变量 ...