尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

37 ACwing 298 Fence 题解

37 ACwing 298 Fence 题解
📅 发布时间:2026/6/19 11:32:15

Fence

题面

有 N 块木板从左到右排成一行,有 M 个工匠对这些木板进行粉刷,每块木板至多被粉刷一次。

第 i 个木匠要么不粉刷,要么粉刷包含木板 \(S_i\) 的,长度不超过 \(L_i\) 的连续的一段木板,每粉刷一块可以得到 \(P_i\) 的报酬。

\(1 \le N \le 16000\)

\(1 \le M \le 100\)

\(1 \le P_i \le 10000\)

题解

这道题要考虑每个工匠刷了哪个区间的木板,然后从前面一个工匠转移到下一个工匠

我们先将所有工匠按照 \(S_i\) 排序,保证无后效性,当前状态都是由已知的状态转移过来的

设 \(f(i,j)\) 表示前 \(i\) 个工匠刷前 \(j\) 个木板的最大价值

有以下转移

  • 第 \(i\) 个工人不刷:\(f(i,j) = f(i - 1, j)\)

  • 第 \(i\) 个工人不刷第 \(j\) 块木板:\(f(i,j) = f(i, j - 1)\)

  • 第 \(i\) 个工人刷第 \(k + 1 \sim i\) 块木板: \(f(i,j) = \max_{j - L_i \le k \le S_i - 1} \{ f(i - 1, k) + (i - k) \times P_i \}\)

第三个转移的时间复杂度为 \(O(N)\) ,想想怎么优化?

第三个转移的难点在于求区间最大值,而且随着 \(j\) 变大,左边界变大,右边界不变,所以看看能不能用单调队列优化

将 \(\max\) 内的已知项移出来 \(f(i,j) = \max_{j - L_i \le k \le S_i - 1} \{ f(i - 1, k) - k \times P_i \} + i * P_i\)

发现 $\max $ 内的式子只和 \(k\) 有关,所以我们可以维护一个决策点 \(k\) 单调递增,\(f(i - 1, k) - k \times P_i\) 单调递减的队列

然后进行转移即可

code

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>using namespace std;const int N = 1.6e4 + 10, M = 110;int n, m;
int q[N], f[M][N];
struct worker {int l, p, s;bool operator < (const worker & t) const {return s < t.s;}
} a[M];int calc (int i, int k) {return f[i - 1][k] - k * a[i].p;
}int main () {cin >> n >> m;for (int i = 1; i <= m; i ++) {scanf ("%d%d%d", &a[i].l, &a[i].p, &a[i].s);}sort (a + 1, a + 1 + m);for (int i = 1; i <= m; i ++) {int h = 1, t = 0;for (int k = max (0, a[i].s - a[i].l); k <= a[i].s - 1; k ++) {while (h <= t && calc (i, q[t]) <= calc (i, k)) t --;q[ ++ t] = k;}for (int j = 1; j <= n; j ++) {//不刷 jf[i][j] = max (f[i - 1][j], f[i][j - 1]);if (j >= a[i].s) {while (h <= t && q[h] < j - a[i].l) h ++;if (h <= t) f[i][j] = max (f[i][j], calc (i, q[h]) + j * a[i].p);}}}cout << f[m][n] << endl;return 0;
}

相关新闻

  • 35 ACwing 297 The Battle Chibi 题解
  • 一款由网易出品的免费、低延迟、专业的远程控制软件,支持手机、平板、Mac 、PC、TV 与掌机等多设备远控电脑!
  • aardio跨窗口传递变量

最新新闻

  • 北京朝阳区黄金回收头名商家!合扬区域第一,同城评比勇夺头名 - 奢侈品交易观察员
  • 序列检测器(Verilog):从状态机到移位寄存器的工程实践
  • 上海各区黄金回收怎么卖才划算?本地人实测变现全流程攻略 - 逸程
  • 2026万元游戏装机怎么选?就看酷睿Ultra两款,装机不踩坑、性能拉满
  • 黄金回收避坑指南|2026主流平台测评正规交易标准 - 奢侈品交易观察员
  • 兰州瓷砖空鼓松动修复:本地口碑好的 5 家正规靠谱门店推荐 | 卫生间 / 客厅空鼓专修(2026 最新) - 金修达家庭维修

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号