CF 797F Mice and Holes(单调队列优化dp)

【解题报告】 Educational Codeforces Round 19 简略的解题报告。 阅读详情

F. Mice and Holes
先给老鼠和洞排序,然后dp解之dp[i][j]表示前i个洞进了j个老鼠的最小cost,很容易想到 O(n∗n∗m) 的做法。然后试了下类似多重背包的方法去优化,结果T了。。
看了下官方题解,给的方案是用单调队列优化。因为我们要从dp[i-1][j-1],dp[i-1][j-2],dp[i-1][j-3]…转移到dp[i][j],每个不同的状态转移过去需要增加的cost不一样。但是如果我们给dp[i-1][j-1],dp[i-1][j-2],dp[i-1][j-3]减去一个差量,使得转移所需增量一样,又由于dp[i][]具有单调性,可以用单调队列维护,那么每个状态就可以在 O(1) 时间内计算出来。

#include <bits/stdc++.h>

using namespace std;

#define ll long long

const ll INF = 0x3f3f3f3f3f3f3f;

const int Max = 5005;
ll pm[Max];
pair<ll,int> h[Max];

ll sum[Max];

ll dp[2][Max];

struct OrderedQueue{
    ll val[Max];
    int id[Max];
    int l,r;

    void init(){
        l = 0;
        r = 0;
    }

    void push(ll v,int i){
        while(l<r && v<val[r-1]){
            r--;
        }
        val[r] = v;
        id[r] = i;
        r++;
    }

    ll front(){
        return val[l];
    }

    void remove(int i){
        while(l<r && id[l]<=i){
            l++;
        }
    }

}que;

int main(){
    int n,m;
    cin>>n>>m;

    for(int i=1;i<=n;i++){
        cin>>pm[i];
    }

    int tot = 0;
    for(int i=1;i<=m;i++){
        cin>>h[i].first>>h[i].second;
        tot += h[i].second;
    }
    if(tot < n){
        cout<<-1<<endl;
        return 0;
    }

    sort(pm+1,pm+n+1);
    sort(h+1,h+m+1);

    for(int i=0;i<Max;i++){
        dp[0][i] = dp[1][i] = INF;
    }

    int cur = 0;
    int pre = 1;
    dp[cur][0] = 0;
    dp[pre][0] = 0;
    for(int i=1;i<=m;i++){
        swap(cur,pre);
        for(int j=1;j<=n;j++){
            sum[j] = sum[j-1] + abs(h[i].first - pm[j]);
        }
        que.init();
        for(int j=0;j<=n;j++){
            que.push( dp[pre][j] - sum[j], j);
            dp[cur][j] = que.front() + sum[j];
            que.remove( j - h[i].second);
        }
    }

    cout<<dp[cur][n]<<endl;
    return 0;
}
Matlab:imageDatastore() 高效读取图像数据集的实战技巧 本文详细介绍了Matlab中imageDatastore()函数的高效使用技巧,帮助用户从繁琐的手动读取图像数据集中解放出来。通过核心语法、关键参数(如IncludeSubfolders、LabelSource、ReadSize)的解析,以及数据集分割、打乱等进阶实战操作,指导读者构建稳定、高效的图像数据读取管道,特别适用于大型图像数据集处理和机器学习项目。 阅读详情

相关推荐

工业组态软件Intouch(单机版)入门{第一篇}

通俗来讲Intouch就是一个能将PLC里的信号显示在画面上的软件。

weixin_41571357的博客 1万+

CF797F:Mice and Holes(dp + 单调队列优化)

F. Mice and Holes time limit per test 1.5 seconds memory limit per test 256 megabytes input standard input output standard output One day Masha came home and noticed n m

junior19的博客 1391

grafana对接zabbix数据展示

【配置】点击【模板】点击【创建模板】添加三个监控项:【名称】搜索【】创建的模板;点击上方【监控项】,点击创建【监控项】点击上方【触发器】点击【创建触发器】主机关联监控模板:左侧【配置】点击 【主机】点击【Zabbix server】查看:左侧点击【监测】点击【主机】点击【Zabbix server】点击最新数据,找到添加的三个模板主机关联监控模板:左侧【配置】点击 【主机】点击【Zabbix server】把监控模板用起来① 明确获取指标数据的方法。

2401_83883919的博客 6592

CF797F Mice and Holes 贪心、栈维护DP

传送门 首先\(\sum c\)有些大,考虑将其缩小降低难度 考虑一个贪心:第一次所有老鼠都进入其左边第一个容量未满的洞(如果左边没有就进入右边第一个未满的洞),第二次所有老鼠都进入其右边第一个容量未满的洞(如果右边没有就进入左边第一个未满的洞),我们只保留这\(2N\)个洞,答案也不会变,因为在最优情况下老鼠最多只会进入这些洞。通过这一步,我们的\(\sum c\)降低到了\(2N\)级别。 ...

weixin_30404405的博客 161

WSL2+Docker+Ollama:解锁Windows本地GPU加速运行DeepSeek-R1模型

本文详细介绍了在Windows系统上,通过WSL2、Docker和Ollama的组合方案,实现本地GPU加速运行DeepSeek-R1模型的全过程。该方案解决了Windows环境下Ollama默认无法调用NVIDIA显卡的痛点,通过配置Docker的GPU支持,强制将计算任务分配给GPU,从而显著提升文本生成速度与效率,为开发者提供了一个便捷的本地AI测试环境。

weixin_28452161的博客 356

第二章 HART硬件设计实战 — 基于SD2057的低功耗调制解调器电路详解与选型指南

本文详细解析了基于SD2057芯片的HART协议低功耗调制解调器硬件设计。通过对比分析,阐述了SD2057在成本与性能上的优势,并重点拆解了其核心电路、外围元件选型、原理图绘制要点及PCB布局的实战技巧,为工业现场仪表的智能通信模块开发提供了完整的低功耗解决方案。

gan8painter的博客 421

COdeforces 508E 题解

题意简述 给定nnn,构造一个长度为2n2n2n的字符串(开了SPJ,一个即可),使得这个字符串是一个匹配的括号序列,并且第iii个左括号满足:它和它匹配的右括号之间的距离在[Li,Ri][L_i,R_i][Li​,Ri​]之间。无解输出IMPOSSIBLE。 数据 输入 4 1 1 1 1 1 1 1 1 输出 ()()()() 输入 3 5 5 3 3 1 1 输出 ((())) 输入 3 5...

LightningUZ的博客 405

27、振动信号实时并行处理与风力发电机模型鲁棒控制设计

本文探讨了振动信号实时并行处理与风力发电机模型鲁棒控制设计两大核心技术。在振动信号处理方面,提出基于FPGA、RT和PC三级架构的并行采集与处理系统,实现高效、实时的振动分析,适用于电机状态监测与预测性维护。在风力发电控制方面,研究风力农场布局优化(WFLO)问题,比较九种多目标元启发式算法性能,并提出基于扰动观察法的最大功率点跟踪(MPPT)控制策略,提升发电效率与系统鲁棒性。研究成果为工业设备智能监控与可再生能源优化提供了有效技术路径。

sunny的博客 72

codeforces 797F Mice and Holes

目录 codeforces 797F Mice and Holes 题意 题解 Code codeforces 797F Mice and Holes 题目传送门1 题意 有\(n\)个老鼠,每个老鼠原来在\(xi\)的位置上,有\(m\)个洞,每个洞分别在...

dieyi9889的博客 232

【计算机视觉】语义分割实战:FCN、U-Net与DeepLab系列详解

语义分割实战:FCN、U-Net与DeepLab系列详解,人工智能、大模型、AI深度学习在计算机视觉领域取得了令人瞩目的进展,语义分割作为计算机视觉领域的关键任务,旨在将图像中的每个像素都分配到特定的类别中,实现对图像内容的精细理解。与目标检测关注物体的类别与位置不同,语义分割能够对场景中的所有元素进行像素级别的分类,这在自动驾驶、医学图像分析、遥感图像解译等众多领域都有着至关重要的应用。例如,在自动驾驶中,准确的语义分割可以帮助车辆识别道路、行人、交通标志等,为安全行驶提供决策依据;在医学图像分析中……

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 9万+

Far planner 代码系列(14)

MatchContourWithNavGraph(3) this->EnclosePolygonsCheck(); //可能有些ctnode的is_contour_necessary属性变成了true // 这说明我的contour_graph是一个local层级的 才会从这里面 get new vertices new_convex_vertices.clear(); //! 把contour_graph_里符

博客 899

Mice and Holes 单调队列优化dp

Mice and Holes 单调队列优化dp n个老鼠,m个洞,告诉你他们的一维坐标和m个洞的容量限制,问最小总距离。1 ≤ n, m ≤ 5000。 ​ 首先列出朴素的dp方程:\(f[i][j]=min(f[i-1][k]+s[j]-s[k])\),其中\(f[i][j]\)表示前i个洞,有j个老鼠进洞。s[j]-s[k]表示第k+1到j个老鼠进洞的路径和。然后我们发现,\(f...

243

【图像处理】德里奇( Deriche)边缘检测器

Deriche边缘检测,同canny算法齐名,因此,知道canny原理,也有必要知道德里奇的检测原理。本篇专门针对德里奇算法展开讨论。

gongdiwudu的专栏 8682

CF797F(Mice and Holes 单调队列优化dp)

题目 肯定要所有老鼠的位置 和 所有洞的位置都排序。 这不是显然的嘛 dp[i][j]:前j个老鼠进入第i个洞的最少花费。注意j要从0-n开始扫描!!!并不是1-n。 dp[i][j]=min(dp[i][k]+sum[i][j]-sum[i][k]). (j-k<=cav[i].c&&k<=j) k也可以等于j,此时就是第i个洞没老鼠。这样就不需要对于每一个i就...

qq_42576687的博客 382

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

CodeForces - 797F Mice and Holes 单调队列DP

题意:给出m个洞的位置和容量 和n个老鼠的位置 问所有老鼠都进洞的最小总和距离 解: 1、刚开始考虑费用流--->建边太多 2、看题解--->DP (1)对老鼠和洞都进行排序 (2)dp[i][j]前i洞的情况下,前j个老鼠都进洞的最小总和 那么有 dp[i][j]=min{dp[i-1][k]+sum[i][j]-sum[i-1][k]}; k的范围为 [j-a[i...

fnq9999的博客 257

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

[Codeforces797F]Mice and Holes

Problem n个老鼠,m个洞,告诉你他们的一维坐标和m个洞的容量限制,问最小总距离。 Solution 用dp[i][j]表示前i个洞,进了前j个老鼠的最小代价 dp[i][j]=min(dp[i-1][k]+Sum[j]-Sum[k])(其中Sum[x]表示前x个老鼠到当前第i个洞的距离总和) 因此我们用单调队列维护dp[i-1][k]-Sum[k] Notice 要开滚动数组,不...

Q882199的博客 253

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【Codeforces797F】Mice and Holes

题意: nn个老鼠,mm个洞,告诉你他们的一维坐标和mm个洞的容量限制,问最小总距离。列出dp方程: dp[i][j]表示从左到右的前i个洞装j只老鼠的最小代价dp[i][j]表示从左到右的前i个洞装j只老鼠的最小代价 发现这个方程在每一层中都是单调的,可以类似斜率优化维护。#include <bits/stdc++.h> #define gc getchar() #define ll lon

wzf_2000的博客 658

CodeForces 797F Mice and Holes

传送门 题目大意 直线上有$N$头老鼠要走入洞,一共$M$个洞,每个洞最多能容纳$r_i$头老鼠。 现在你要让每个老鼠洞进洞,求所有老鼠进洞的距离之和最小值。 原题$n,m\leq 5000$,先加强版$n,m\leq 10^6$。 题解 贪心 将所有的洞和坐标横坐标排序,从左往右依次考虑。 若当前为位于$pos$的老鼠,那么它一定会去匹配之前的洞(如果有的话) 用堆...

weixin_30323961的博客 177

Codeforces 797F Mice and Holes dp

首先肯定是将老鼠和洞都排好序, dp[ i ][ j ] 表示处理了 前 i 个洞, 进去 j 只老鼠的最小距离和, 很明显处理先处理靠前的老鼠。 然后观察一下这个dp, 发现它满足决策单调性, 然后直接上了个分治, 然后 T 了。 然后继续观察了半天, 发现对于, dp[ i - 1 ][ 0 ],dp[ i - 1 ][ 1 ],dp[ i - 1 ][ 2 ] .......

205

CF 311B Cats Transport(单调队列优化DP)

题目链接:http://codeforces.com/problemset/problem/311/B 题意:有1到n共n座山。m个牛。每个牛都 在某一个山上吃草。第i个牛在时间ti时刻吃完草然后在山下等着管理员来牵走。给出相邻两座山之间的距离。已知有P个管理员。管理员从1出发依次到n将正 在等的牛牵走。注意管理员不会在山下等牛,只牵走正在等的牛。管理员的走路速度为1。假如1到2的距离为10,那...

weixin_33872566的博客 159

CF372C Watching Fireworks is Fun(dp+单调队列优化)

A festival will be held in a town's main street. There are n sections in the main street. The sections are numbered 1 through n from left to right. The distance between each adjacent sections is 1. I...

dsaghjkye的博客 584

CF487B Strip(单调队列预处理+单调队列优化dp)

这题妙啊。。。堪称优先队列中的典范了啊。。。 首先预处理出L数组,表示右边界为i,左边界最多能扩展到L[i] 。这个过程可以通过两个单调队列和一个指针p解决,分别维护区间最大最小值即可。复杂度O(n) 然后进行dp,dp[i]表示前i个数至少分成几部分,不能分的为inf,考虑转移: dp[i]=min{dp[j]| L[i]-1<=j<=i-l}+1,然而朴素转移是O(n^2)的,显然会T。而

Icefox的博客 687

cf 1304F2 (单调队列优化DP)

cf 1304F2 (单调队列优化DP) 题意: 给你nnn天,每天有mmm个拍照点,每次拍照是连续两天且拍照颜色不同,每次最多拍连续k段,连续两天就是2*k,每个拍照点有一个权值,求最大权值和 思路: 容易想到一个dpdpdp,dp[i][j]dp[i][j]dp[i][j]前iii天拍完了,第iii天从jjj这个地方开始拍,注意这个在转移前是一个相机的前一天,但是转移后得把一个相机的另一天计算进去。 dp[i][j]=max(dp[i−1][l]+sum[min(j+k−1,m)]−sum[j−1]−重

weixin_45539557的博客 302

CF - 797A. k-Factorization - 思维+贪心+数学

题目描述: A. k-Factorization time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Given a positive inte

终有绿洲摇曳在沙漠 431

Mice and Holes

题意: 有 $n$ 只老鼠和 $m$ 个鼠洞,第 $i$ 只老鼠的坐标为 $x_i$,第 $j$ 个鼠洞的坐标为 $p_j$ ,容量为 $c_j$。 第 $i$ 只老鼠钻进第 $j$ 个鼠洞的距离为 $|xi-pj|$ ,问所有老鼠都进洞的最小距离总和是多少。 解法: 方法一:   考虑dp   每一个移动无非是$p_i - x_j$,$x_i - p_j$   $f(i,j)...

weixin_30687811的博客 266

Codeforces 797F Mice And Holes DP(单调队列优化)

点击打开链接 题意:n个老鼠,m个洞,n,mj花费:|xi-pj|,问n只老鼠都跑到洞里的最小花费?  定义状态d[i][j]:前i个洞,装前j只老鼠的最小花费 ,sum[i][j]表示前j只老鼠进第i洞话费  首先排序后,最优的情况为:进一个洞的老鼠一定是连续的一批(不会出现a,c进洞i,b进洞i-1)->(明显a进洞i-1,b,c进洞i更优)  容易得到:靠右边的洞肯定让前j只中靠右边

Masamiiiiii 607
上一篇: CF 793D Presents in Bankopolis
squee_spoon
博客等级 码龄14年 61粉丝 455原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值