题意:

n家饭店,m张餐票,第i家和第i+1家饭店之间的距离是$A_i$,在第i家饭店用掉第j张餐票会获得$B_{i,j}$的好感度,但是从饭店i走到饭店j会有$dis_{i,j}$的代价,可以从任意一个饭店出发,求好感度减代价的差的最大值。

$2\leq N\leq 5000$

$1\leq M\leq 200$

$1\leq A_i,B_{i,j}\leq 10^9$

题解:

看错了两次题是怎样一种体验。。。开始题意锅了说只能从1出发,然后更正我没看到。。。于是写了个自以为对的傻逼线段树自爆成13分。。。

其实这题做法很多,可以利用决策单调性二分dp或者建笛卡尔树区间加,我讲一个我写的矩形差分的做法。。。

直接计算路线的价值比较难,可以反过来考虑每个$B_{i,j}$对哪些答案有影响。

令$x$为满足$x<i$且$B_{x,j}>B_{i,j}$的最大的$x$,$y$为满足$y>i$且$B_{y,j}>B_{i,j}$的最小的$y$,那么$B_{i,j}$就会对左端点$l∈(x,i]$,右端点$r∈[i,y)$的区间产生贡献。

容易发现$x$,$y$是单调递增的,所以可以用一条单调栈来维护;把$(x,y)$当成平面上的一个点,那贡献就等价于在整个矩阵上加上一个值,可以用差分前缀和来搞。

时间复杂度$O(n^2+nm)$

代码:

 #include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#define inf 2147483647
#define eps 1e-9
using namespace std;
typedef long long ll;
ll n,m,L,R,st[],num[],b[][],l[][],r[][];
ll ans=,a[],pre[],sq[][];
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<n;i++){
scanf("%lld",&a[i]);
pre[i+]=pre[i]+a[i];
}
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
scanf("%d",&b[j][i]);
}
}
for(int i=;i<=m;i++){
L=R=;
for(int j=;j<=n;j++){
while(L&&b[i][j]>st[L])L--;
l[i][j]=L?num[L]+:;
st[++L]=b[i][j];
num[L]=j;
}
for(int j=n;j;j--){
while(R&&b[i][j]>st[R])R--;
r[i][j]=R?num[R]-:n;
st[++R]=b[i][j];
num[R]=j;
}
for(int j=;j<=n;j++){
sq[l[i][j]][j]+=b[i][j];
sq[l[i][j]][r[i][j]+]-=b[i][j];
sq[j+][j]-=b[i][j];
sq[j+][r[i][j]+]+=b[i][j];
}
}
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
sq[i][j]+=sq[i][j-];
}
for(int j=;j<=n;j++){
sq[i][j]+=sq[i-][j];
}
for(int j=i;j<=n;j++){
ans=max(ans,sq[i][j]-pre[j]+pre[i]);
}
}
printf("%lld",ans);
return ;
}

[arc067f]yakiniku restaurants的更多相关文章

  1. [arc067F]Yakiniku Restaurants[矩阵差分]

    Description 传送门 Solution 假如我们确定了烧烤店区间[l,r],则票j必定会选择在B[i][j](l<=i<=r)最大的烧烤店使用. 反过来想,我们想要票j在第i个烧 ...

  2. 【AtCoder】ARC067 F - Yakiniku Restaurants 单调栈+矩阵差分

    [题目]F - Yakiniku Restaurants [题意]给定n和m,有n个饭店和m张票,给出Ai表示从饭店i到i+1的距离,给出矩阵B(i,j)表示在第i家饭店使用票j的收益,求任选起点和终 ...

  3. AtCoder Regular Contest 067 F - Yakiniku Restaurants

    题意: 有n个餐厅排成一排,第i个与第i+1个之间距离是Ai. 有m种食物,每种食物只能在一个餐厅里吃,第j种食物在第i个餐厅里吃的收益是$b[i][j]$. 选择每种食物在哪个餐厅里吃,使收益减去走 ...

  4. NOIp2018模拟赛三十六

    好久没打模拟赛了...今天一样是两道国集,一道bzoj题 成绩:13+0+95=108 A题开始看错题了...导致样例都没看懂,结果xfz提醒我后我理解了一个我自认为正确的题意(事实证明我和xfz都错 ...

  5. AtCoder瞎做第二弹

    ARC 067 F - Yakiniku Restaurants 题意 \(n\) 家饭店,\(m\) 张餐票,第 \(i\) 家和第 \(i+1\) 家饭店之间的距离是 \(A_i\) ,在第 \( ...

  6. 【AtCoder】ARC067

    ARC067 C - Factors of Factorial 这个直接套公式就是,先求出来每个质因数的指数幂,然后约数个数就是 \((1 + e_{1})(1 + e_{2})(1 + e_{3}) ...

  7. codeforces 212E IT Restaurants(树形dp+背包思想)

    题目链接:http://codeforces.com/problemset/problem/212/E 题目大意:给你一个无向树,现在用两种颜色去给这颗树上的节点染色.用(a,b)表示两种颜色分别染的 ...

  8. 【Codeforces 212E】Restaurants

    Codeforces 212 E 题意:给一棵树,其中删去一个点,剩余的联通块们同一个联通块都得涂同一个颜色(黑或白),问黑色涂的个数有可能是哪些. 思路:肯定是背包. 假设现在删掉\(u\)这个节点 ...

  9. 【题解】Atcoder ARC#67 F-Yakiniku Restaurants

    觉得我的解法好简单,好优美啊QAQ 首先想想暴力怎么办.暴力的话,我们就枚举左右端点,然后显然每张购物券都取最大的值.这样的复杂度是 \(O(n ^{2} m)\) 的.但是这样明显能够感觉到我们重复 ...

随机推荐

  1. TCP基本概念

    TCP协议是一个复杂的.可靠的字节流协议.不通用UDP协议. TCP提供客户与服务器之间的连接.TCP客户先与给定的服务器建立一个连接,再跨该连接与服务器交换数据,最后终止这个连接. TCP提供了可靠 ...

  2. 【XSY2689】王子 - 网络流

    复活!qwq 题目来源:2018冬令营模拟测试赛(九) 题意: [背景描述]     不是所有王子都会遇见自己的中关村,主公,公主. 从前有个王子姓王,王王子遇到了一位美丽的公主,她的名字当然是公公主 ...

  3. 洛谷4623 [COCI2012-2013#6] BUREK

    题目描述 给定N个三角形,和M条直线,直线要么平行于X轴,要么平行于Y轴,问这M条直线 分别经过多少个三角形内部 (注意是内部即分开的两个多边形的面积均大于零). 输入输出格式 输入格式: 第一行一个 ...

  4. BZOJ 5180 [Baltic2016]Cities(斯坦纳树)

    斯坦纳树的板子题. 斯坦纳树问题是组合优化问题,与最小生成树相似,是最短网络的一种. 最小生成树是在给定的点集和边中寻求最短网络使所有点连通. 而最小斯坦纳树允许在给定点外增加额外的点,使生成的最短网 ...

  5. 修改Myeclies作者用户名

    首先点击 windos 点击 preferences 依次点击左侧 Java -> Code Style -> Code Templates 击右侧Comments,将其中的Types项, ...

  6. 基于element的表单渲染器 (el-form-renderer)

    基于 element-ui 封装的表单渲染器,完整继承了 element 的属性定义,并进行了简单扩展,从而用户能够通过使用一段预设的数据渲染出一个完整的 element 表单. 演示地址 项目地址 ...

  7. js中“原生”map

    var map = {}; // Map map = new HashMap(); map[key] = value; // map.put(key, value); var value = map[ ...

  8. ASP.NET-AJAX.FORM提交附件失败

    尝试了不少时间在AJAX.FORM提交附件,发现完全不行,经过下面的这个博客的介绍,使用ajax.form.js插件提交成功,记录一下该博文网址和结论: 相关网址:http://www.cnblogs ...

  9. 洛谷—— P1260 工程规划

    https://www.luogu.org/problem/show?pid=1260 题目描述 造一幢大楼是一项艰巨的工程,它是由n个子任务构成的,给它们分别编号1,2,…,n(5≤n≤1000). ...

  10. COGS——T 1168. 机器调度

    http://www.cogs.pro/cogs/problem/problem.php?pid=1168 ★★   输入文件:machine.in   输出文件:machine.out   简单对比 ...