「joisc 2019-d2t2」ふたつの料理 Two Dishes

我要放假

神仙题。

首先可以把两根轴拉成平面(which is a common trick),把决策的过程看作从 ((0, 0)) 走到 ((n, m)),每次可以往上走或往右走(左下为 (0, 0),右上是 (n, m))。考虑相对于我们走出的决策路线表现出了怎样特征的点会对答案造成贡献。对于 A 套餐的操作 (i) 处理出 (x_i),表示做完了 A 套餐的前 i 个操作,最多还能做到 B 套餐的 x_i 操作,同理处理出 (y_j)。

把 ((i, x_i)),((y_j, j)) 看作点放到平面上,当 ((i, x_i)) 在路径上方是获得 (p_i) 的贡献,当 ((y_j, j)) 在路径当中或下方时获得 (q_j) 的贡献。可以先把 p_i 全部加上然后取反转化调整到和 q_j 同样的贡献条件。

那么现在问题是:给出平面,找出一条从 (0, 0) 到 (n, m) 的路径,使得路径当中以及以下的点权和最大。

考虑 dp,设 (f[i][j]) 为走到 (i, j) 的最优答案。令 (s[i][j]) 为点 ((i, j)) 正下方以及自己的点权和,然后我们发现无论从上一行还是上一列转移写出来都不对劲((dp[i][j] = dp[i-1][j]+f_1(i, j)+dp[i][j-1]+f_2(i, j)) 的形式,不好优化),我们考虑从 拐点转移(这一步很神奇,同时这一步也是我觉得整道题最 tricky 的地方,但是网上的题解都太草率了,给的转移也不能让我信服),写出的 transitions 是 (\displaystyle dp[i][j] = \max_{k \leqslant j}{dp[i-1][k]}+s[i][j]),自己画一个先右再上的折箭头就理解了。

考察转移发现我们有太多的无用转移,注意到平面中权重非 0 的点只有 (O(n+m)) 个,于是我们考虑非 0 点。首先把 s[i][j] 拆成 (w_{0, j}+w_{1, j}+\dots +w_{i, j}),这样我们的区间修改就是区间加定值而不是加一个毫无特征的序列了。再考虑前缀 max,因为我们是差分数组,我们只需要将 diff array 中的负项删除,并删除其影响,最后一位即是最大值。

/*
lyddnb
dp[i][j] = max[k  g[1000100];  // g[i](x, y) point (i, x) with weight y
signed main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m;
  for (int i = 1; i > a[i] >> s[i] >> p[i], a[i] += a[i - 1];
  for (int i = 1; i > b[i] >> t[i] >> q[i], b[i] += b[i - 1];
  for (int i = 1; i  s[i]) continue;
    int j = upper_bound(b + 1, b + m + 1, s[i] - a[i]) - b;
    ans += p[i], g[i].eb(j, -p[i]);
  }
  for (int i = 1; i  t[i]) continue;
    if (b[i] + a[n]  st;
  for (int i = 0; i  m) continue;
      auto it = st.find(x);
      while (it != st.end() && dif[*it] < 0) {
        ll tmp = dif[*it];
        it = st.erase(it);
        if (it != st.end()) dif[*it] += tmp;
      }
    }
  }
  for (auto x : st) ans += dif[x];
  cout << ans << "\n";
}

Original: https://www.cnblogs.com/orchid-any/p/16589454.html
Author: BoringHacker
Title: 「joisc 2019-d2t2」ふたつの料理 Two Dishes

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/604068/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Goobye, cnblogs

    转 typecho 了,个人网站的客制化程度当然不是 cnblogs 能比得上的。 Original: https://www.cnblogs.com/orchid-any/p/1…

    数据结构和算法 2023年6月12日
    068
  • CF1614D-Divan and Kostomuksha

    首先我们有结论:本质相同的数一定被放在一起。 比方说我们现在令 (x) 成为 (a_1),那么我们希望让剩下的所有数 (y) 都变成 (\gcd(x,y)),这样子势必会产生很多相…

    数据结构和算法 2023年6月12日
    091
  • django后台服务器优化

    背景留言板小程序的后台是采用djando进行开发的,数据库引擎是使用的mysql,由于原阿里云的服务器配置比较低,cpu只有1核,内存只有1G,在用户比较集中访问留言板小程序的时候…

    数据结构和算法 2023年6月16日
    068
  • 汉诺塔

    1 #include 2 3 using namespace std; 4 5 void Hanoi(int n, char A, char B, char C) { 6 //把n…

    数据结构和算法 2023年6月16日
    0136
  • B. Build the Permutation

    题目分析:我们先简单的分析一下这道题是在干什么啊,给我们三个整数n,a,b,问我们能否构造这样的排列使得序列中有a个极大值,b个极小值,能的话就给出任意一种可能的情况,不能的话就输…

    数据结构和算法 2023年6月7日
    093
  • 设计模式的基础知识

    概念基础 模式起源于建筑业而非软件业,下面是最早研究模式的 Christopher Alexander 博士对模式下的定义: A pattern is a successful o…

    数据结构和算法 2023年6月8日
    0134
  • Web入门(1)——制作简单的网页

    安装基础软件 设计网站外观 做出计划 绘制草图 选定内容 文本 主题颜色 图像 字体 处理文件 网站应保存在何处? 关于大小写和空格的提示 网站应该使用什么结构? 文件路径 安装基…

    数据结构和算法 2023年6月7日
    0106
  • redis:rdb和aof

    Redis持久化 RDB。加载速度快,可能会导致一定时间内的数据丢失。 AOF。数据准确,但由于文件较大会影响 Redis 的启动速度。 混合持久化。同时使用 RDB 和 AOF …

    数据结构和算法 2023年6月7日
    092
  • 做题记录 洛谷P1417烹调方案

    此题乍一看是普通背包,但由于物品价值不是固定的,而是随时间(重量)而改变。因此,采取不同顺序选取一组相同物品可能产生不同价值。 这种问题属于 泛化背包问题,要想解决,就需要固定顺序…

    数据结构和算法 2023年6月12日
    087
  • WordCloud(词云)的简单运用

    数据类型|默认值 font_path string 字体路径windows:C:/Windows/Fonts/Linux: /usr/share/fonts width int (…

    数据结构和算法 2023年6月12日
    090
  • java web项目基础

    web.xml中可以配置如下信息: context-param,listener,filter,servlet。 他们的加载顺序和在web.xml文件中的先后顺序没有关系。 con…

    数据结构和算法 2023年6月7日
    081
  • 常用数据结构之数组

    1.背景 数组是最最基本的数据存储方式 数据结构从根本来看其实就2中数组和链表其他都是在这两种的基础上扩展出来的比如:队列-数组链表都能实现栈-数组链表都能实现哈希表-数组和队列实…

    数据结构和算法 2023年6月12日
    075
  • js同步http请求并加缓存的实现

    缓存实现 背景:有时候接口返回的数据短期内是不会改变的,可以对http接口返回的数据加缓存,即减少了后端请求,又加快了前端性能,真是一举两得! 实现原理:用js的Object对象即…

    数据结构和算法 2023年6月8日
    0118
  • UVA1619 感觉不错 Feel Good(良好的感觉) 题解

    又是一道毒瘤题目 0.题面: 给出正整数n和一个(1 1.思路 一开始试图使用单调栈,然而在调试一上午无果后愤然打了个分治,然后就过了233 根据分治三步法,算法流程分为: 1.分…

    数据结构和算法 2023年6月12日
    061
  • 数据库事务以及事务的四个特性

    如果你是一名后台程序员开发,那么你一定或多或少的接触过事务。因为相对于高并发,且业务有一定复杂性的系统来说,事务是一定需要的,而且是必须的。他可以帮助我们将若干不同的子任务当成一个…

    数据结构和算法 2023年6月8日
    0116
  • 学习札礼——数据结构

    哈希表 出了不能求循环节在都比KMP强 把-10e9~10e9的数映射为0~10e5,xmodN(要把N设置为第一个大于的质数,减少冲突) 开放寻址法核心就是先找个一个位置,如果这…

    数据结构和算法 2023年6月7日
    089
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球