Rudolf and k Bridges

news/2025/3/20 17:59:03/文章来源:https://www.cnblogs.com/PeachyGalaxy/p/18783589

Rudolf and k Bridges

题目

大致题意

上图为俯视图

有一个\(nXm\)的网格,下标从\(1-n\) 以及从 \(1-m\)\((i, j)\) 的值就是这个这垂直一格水的深度

现在要安装支架,有几个信息:

  • \((i, 1)\)\((i, m)\)必须要安装

  • 相邻支架的距离不能超过 \(d\), 相邻距离为 \(abs(j - i) - 1\)

  • 在一个格子里安装支架的成本是 \(aij + 1\)

  • 连续安装 \(k\) 行,求出 最小成本

思路

求连续k行最小成本 --> 求每一行的最小成本,再利用滑动窗口看哪个连续 \(k\) 行的总成本最小


求每一行的最小成本

既要保证距离不超过 \(d\),又要最小

就可以使用小根堆 以及利用 单调队列的思想
假设第i个格子是最后一个,那么以它结尾的值就是 现在队列的最小值 ➕它的值 ➕ 1,所以我们就要将每一个格子的总值都算出来,最后汇总时使用(\(j==m\) 时)


如何实现

队列中的个数小于 \(d + 2\) 的时候就可以将现在的值入队,入队的是以它结尾的总成本,以及它的下标

如果队列中的个数超过了 \(d + 2\),那么就要 \(pop\) 掉最小值,实时更新当前位置的最小总成本

由于 \((i, 1)\)\((i, m)\) 都要安装,所以在每一行开始遍历的时候直接 \(push(1, 1)\) 解决了第一个;在 \(j == m\) 的时候就直接结束这一行,将最终总成本放到 \(sum\)数组中

最后用滑动窗口求出连续 \(k\) 行的最小成本之和

代码

// Problem: E. Rudolf and k Bridges
// Contest: Codeforces - Codeforces Round 933 (Div. 3)
// URL: https://codeforces.com/contest/1941/problem/E
// Memory Limit: 256 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include <iostream>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <string>
#include <stack>
#include <queue>
#include <unordered_map>
#include <map>
#include <vector>
#include <cstring>
#include <bitset>
#include <set>using namespace std;
using ll = long long;
using PII = pair<ll, int>;int gcd(int a, int b) {return b == 0 ? a : gcd(b, a % b);}
int lcm(int a, int b) {return a / gcd(a, b) * b;}void solve()
{int n, m, k, d; cin >> n >> m >> k >> d;vector<vector<int>> g(n + 1, vector<int>(m + 1));vector<ll> s(n + 1);for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++) cin >> g[i][j];for(int i = 1; i <= n; i++) {priority_queue<PII, vector<PII>, greater<PII>> pq;pq.push({1, 1}); //因为(i, 1)处必须安装for(int j = 2; j <= m; j++) {//如果超过了d的话就pop掉最小的while(pq.size() && pq.top().second < j - d - 1) pq.pop();if(j == m) s[i] = pq.top().first + g[i][j] + 1; //(i, m)处必须安装else pq.push({pq.top().first + g[i][j] + 1, j}); }}ll mi = 0x3f3f3f3f3f3f3f3f, sum = 0;for(int i = 1; i <= n; i++) {sum += s[i];if(i >= k) {mi = min(mi, sum);sum -= s[i - k + 1];}}cout << mi << '\n';
}int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int t; cin >> t;//int t = 1;while (t--) solve();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/902116.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

背离Divergence Trading ,贪小便宜

趋势交易(trend trading)和背离交易(divergence trading),代表了两种不同的交易策略。做背离交易相当于赌市场短期失效,承认你比市场聪明,虽然能赚小钱,但往往是亏大钱的根源。 贪小便宜爱背离,贪小便宜(gain small advantages)不爱止损(cut losses),所以背离和不止损…

在鸿蒙NEXT开发中实现一个语音识别组件

鸿蒙系统发布以后都不知道叫它5.0版本还是NEXT版本了,哈哈,反正是最新版本就对了。对于语音转换文字,鸿蒙系统提供了离线语音识别模型speechRecognizer,语种目前支持中文,识别效果非常不错。今天要分享的是使用speechRecognizer实现一个语音识别组件。要实现语音识别,首先…

激光代加工产品一览-代加工-外协加工-委外加工-激光代加工-河南郑州亚克力切割雕刻代加工-芯晨微纳(河南)

关键词:河南省郑州市、激光代加工、激光打标、激光切割、激光雕刻、激光打孔、激光毛化、激光分切 简介:芯晨微纳(河南)光电科技有限公司,专注于激光微纳代加工、设备/耗材代理销售、设备租赁、技术推广服务,可处理材料类型及应用范围十分广泛,欢迎来电咨询(韩经理1823…

20242801 2024-2025-2 《网络攻防实践》第4次作业

20242801 2024-2025-2 《网络攻防实践》第4次作业 一、实验内容 ​ 在虚拟机环境中完成TCP/IP协议栈重点协议的攻击实验,学习ARP缓存欺骗攻击、ICMP重定向攻击、SYN Flood攻击、TCP RST攻击、TCP会话劫持攻击的原理和相关知识,并动手进行实践。 二、实验过程 (一)ARP缓存欺…

缓存监控治理在游戏业务的实践和探索

通过对 Redis 和 Caffeine 的缓存监控快速发现和定位问题降低故障的影响面。作者:来自 vivo 互联网服务器团队- Wang Zhi 通过对 Redis 和 Caffeine 的缓存监控快速发现和定位问题降低故障的影响面。 一、缓存监控的背景游戏业务中存在大量的高频请求尤其是对热门游戏而言,而…

从零开始驯服Linux(一):ZYNQ-Linux启动文件构建全解析

从零开始驯服Linux(一):ZYNQ-Linux启动文件构建全解析 ZYNQ系列芯片集成了ARM处理器和FPGA(可编程逻辑单元),正是因为由于ARM处理器的存在,所以我们可以在ZYNQ系列芯片上面运行Linux系统。 在ZYNQ系列芯片上运行Linux会给我们带来很多优势:首先,我们可以将部分逻辑处理…

# 20241902 2024-2025-2 《网络攻防实践》第六周作业

1.实验内容 通过本周的学习和实践,学习使用metasploitable对windows进行远程的渗透测试实验;学习利用wireshark进行日志文件的分析和攻击取证,解读攻击者所利用的攻击、攻击者的具体操作以及如何对攻击行为进行防范;实践同一内网中对利用metasploitable对其他windows系统进…

gitlab+jenkins+harbor+k8s安装操作流程之rancher

关闭防火墙 systemctl stop firewalld yum安装依赖 yum install -y yum-utils device-mapper-persistent-data lvm2 下载docker-ce.repo源 wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo 安装docker yum install…

win11优化pyenv-venv虚拟环境切换

问题 使用 pyenv-venv activate env_name 命令激活虚拟环境后无法使用tab自动完善命令无法上下键切换历史命令脚本 #!/usr/bin/bashvenvs="/d/JavaProgramFiles/pyenv-win/pyenv-win-venv/envs" # #!/bin/bashactivate () {# 设置 PATHORIGIN_PATH="${ORIGIN_P…

安装Harbor

环境:OS:Centos 7说明:需要docker和 docker compose[root@node1 data]# docker version Client: Docker Engine - CommunityVersion: 26.1.4API version: 1.45Go version: go1.21.11Git commit: 5650f9bBuilt: Wed Jun 5 11:32:04…

Linux学习路线

Linux 学习路线Linux 学习路线 by 程序员鱼皮💂 + 💻 = 👴🏽 建议先观看视频入门:https://www.bilibili.com/video/BV1ev411G7VE/ 为什么学 Linux? 相比于 Windows,Linux 免费、开源、安全、灵活、稳定、便于开发,所以更受企业青睐,甚至 90% 以上 的企业应用都是用…

【无问AI网络安全大模型】协助渗透测试挖掘sql注入

在日常工作中发现了一个登录框,话不多说,搞搞看看存不存在SQL注入。输入用户名密码开始抓包,可以看出用户名密码都进行了加密这个时候输入单引号,发现页面报错。 输入双引号,页面恢复正常这个时候,可以判断这个系统存在注入的可能非常大, 手工使用了报错注入、盲注都不行…