题意:

有n个餐厅排成一排,第i个与第i+1个之间距离是Ai。

有m种食物,每种食物只能在一个餐厅里吃,第j种食物在第i个餐厅里吃的收益是$b[i][j]$.

选择每种食物在哪个餐厅里吃,使收益减去走过距离最大(食物可以不按顺序吃)。

显然走过距离就是选择的餐厅所在的区间的长度,让f[i][j]表示选择的餐厅所在的区间为i到j的最大收益。

对于每个b[i][j],求出左边和右边第一个比它大的位置l,r.

那么对于左端点在l+1~i,右端点在i~r-1的区间里第j种食物肯定在第i个餐厅吃。

相当于f的一个矩阵加,打标记+前缀和。

#include<bits/stdc++.h>
#define N 5005
#define ll long long
using namespace std;
int n,m;
int st[N],top;
int a[N][205],l[N],r[N];
ll f[N][N];
void add(int x1,int y1,int x2,int y2,int z)
{f[x1][y1]+=z;f[x2+1][y2+1]+=z;f[x1][y2+1]-=z;f[x2+1][y1]-=z;
}
ll sum[N];
int main()
{scanf("%d%d",&n,&m);for(int i=2;i<=n;i++){int tmp;scanf("%d",&tmp);sum[i]=sum[i-1]+tmp;}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){scanf("%d",&a[i][j]);}}for(int i=1;i<=m;i++){memset(l,0,sizeof(l));memset(r,0,sizeof(r));top=0;for(int j=1;j<=n;j++){while(top&&a[st[top]][i]<=a[j][i])r[st[top--]]=j;st[++top]=j;}while(top)r[st[top]]=n+1,top--;for(int j=n;j>=1;j--){while(top&&a[st[top]][i]<a[j][i])l[st[top--]]=j;st[++top]=j;}for(int j=1;j<=n;j++){add(l[j]+1,j,j,r[j]-1,a[j][i]);}}ll ans=0;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){f[i][j]+=-f[i-1][j-1]+f[i-1][j]+f[i][j-1];if(j>=i)ans=max(ans,f[i][j]-sum[j]+sum[i]);}}cout<<ans<<endl;return 0;
}

  

转载于:https://www.cnblogs.com/ezyzy/p/7688425.html

AtCoder Regular Contest 067 F - Yakiniku Restaurants相关推荐

  1. AtCoder Regular Contest 085 F NRE 线段树优化dp

    题意 有长度为n初始全为0的数组A和仅由0和1组成的数组B.现在给出m个区间,每次可以选择某个区间[l,r],使得A数组下标在[l,r]之间的元素变为1.问A和B最小不同位置数量是多少. n,m< ...

  2. 【arc075f】AtCoder Regular Contest 075 F - Mirrored

    题意 给定一个数x,问有多少个正整数y,使得rev(y)-y==x 其中rev(x)表示x按位翻转之后得到的数. x<=1e9 做法 首先通过打表发现,这个答案不会很大. 这就说明解相当地松弛. ...

  3. AtCoder Regular Contest 107 F - Sum of Abs(网络流最小割)

    题目链接 题意就是给定一个无向图,每个点有权值ai,bia_i,b_iai​,bi​,现在需要删去其中的一些点,其中删去一个点的花费为aia_iai​,删点后的图的分数为每一个联通块的分数之和,一个联 ...

  4. AtCoder Regular Contest 067

    C 给你一个数x和一个色子,问你每次取最上面的数 问:最少需要转动多少次色子,使上面数的和大于x 贪心:每次取6或5, This is the code: #include<algorithm& ...

  5. AtCoder Regular Contest 065

    AtCoder Regular Contest 065 C - Daydream Score : 300300300 points 倒着来就行了,正着来会产生歧义匹配,dreamer,dreamdre ...

  6. NOMURA Programming Contest 2021(AtCoder Regular Contest 121)

    文章目录 A - 2nd Greatest Distance B - RGB Matching C - Odd Even Sort D - 1 or 2 E - Directed Tree F - L ...

  7. AtCoder Beginner Contest 215 F - Dist Max 2

    AtCoder Beginner Contest 215 F - Dist Max 2 平面上有一系列的点(xi,yi)(x_i,y_i)(xi​,yi​),定义两点(xi,yi),(xj,yj)(x ...

  8. AtCoder Beginner Contest 204 F Hanjo 2

    AtCoder Beginner Contest 204 F Hanjo 2 H宽,W长的二维平面上,用1 * 1或者2 * 1的地砖来铺,要求铺满,求出方案数. 数据范围H <= 6, W & ...

  9. AtCoder Regular Contest 100 D - Equal Cut 思维 + 前缀和

    传送门 文章目录 题意: 思路: 题意: 给你一个数组aaa,你要将其分成四份,让这四份中和的最大值−-−最小值最小,输出这个最小值. n≤2e5,ai≤1e9n\le2e5,a_i\le1e9n≤2 ...

最新文章

  1. VS2005发布、生成网站时如何设置固定的dll文件名?
  2. 41 JavaScript中的闭包
  3. Linux 网卡驱动相关——03
  4. xpath技术解析xml以及案例模拟用户登录效果
  5. 确保独立计算机上的EFS加密数据恢复
  6. 轻量级UIImageView分类缓存 库 AsyncImageView 使用
  7. python安装pymssql
  8. DCMTK 3.6.2(MD支持库)与Microsoft Visual Studio 2017开发环境的搭建
  9. at java.net.urlclassloader.findclass_如何使用URLClassLoader加载* .class文件?
  10. xml控制html样式,XML与CSS综合设置实例
  11. html左滑效果图,前端福利——左滑右滑,绝对是你见过的最简单的写法 - 你猜猜看...
  12. 爱数私有云盘 AnyShare 部署(二)
  13. java实现9*9乘法表
  14. 线性方程组解个数的判定和求解
  15. html如何设置导航栏例子,CSS 导航栏
  16. 怎么修改PDF文件的文字内容
  17. Unity Realistic FPS插件 Ironsights脚本简化
  18. IDEA引用Class文件失败问题解决
  19. python成绩查询系统_python成绩查询
  20. 公司旅游--金华武义二日游

热门文章

  1. java velocity是什么意思,什么是Apache Velocity?
  2. c语言里变量列表,嵌入式C语言里的土豪们之变量类型
  3. Java的表白程序_java表白程序
  4. python爬虫基础教程115_Python解析网页源代码中的115网盘链接实例
  5. 思科交换机Vlan配置以及VLAN应用场景
  6. hashmap赋值给另一个hashmap_图解设计一个 HashMap
  7. Spring Cloud Gateway 突发高危漏洞,下一代云原生网关恰逢其时?
  8. ChaosBlade 在工商银行混沌工程体系中的应用实践
  9. “云”端的语雀:用 JavaScript 全栈打造商业级应用
  10. Charles的功能操作