首页 > 其他分享 >ABC320 FG

ABC320 FG

时间:2024-02-28 15:14:10浏览次数:24  
标签:le leftarrow 油量 min FG ge ABC320 加油

F - Fuel Round Trip

注意到路程分成了两段,所以我们也按两段 dp。

设 \(f_{i,j,k}\) 表示到第 \(i\) 个加油站,来程加油后油量为 \(j\),回程加油后油量为 \(k\) 的最小代价。

初始对于 \(0\le i\le h\),有 \(f_{0,h,i}=0\)。

考虑刷表法转移(\(i\to i+1\)),令 \(d=x_{i+1}-x_i\),然后根据在哪一段路程加油分类讨论:

  • 不加油:

\[f_{i+1,j-d,k+d}\leftarrow f_{i,j,k} \]

需要满足 $j-d\ge 0$ 且 $k+d\le h$。
  • 来程时加油:

\[f_{i+1,\min(j-d+F_{i+1},h),k+d}\leftarrow f_{i,j,k}+p_{i+1} \]

需要满足 $j-d\ge 0$ 且 $k+d\le h$。
  • 回程时加油:

    ……此时发现不太好搞,如果直接枚举容量,那么我们无法判断加油前的容量是多少。于是我们修改状态的定义:

    \(f_{i,j,k}\) 表示到第 \(i\) 个加油站,来程加油后油量为 \(j\),回程加油前油量为 \(k\) 的最小代价。

    这样前面的转移,初始条件都不变。然后就很好转移了,枚举 \(i+1\) 处的返程容量 \(k\),那么:

\[f_{i+1,j-d,k}\leftarrow f_{i,j,\min(k+F_{i+1},H)-d}+p_{i+1} \]

需要满足 $j-d\ge 0$ 且 $\min(k+F_{i+1},H)\ge 0$。

这样最后的答案就是 \(\min_{i=0}^{h}f_{n,i,i}\)。

时间复杂度 \(O(n^3)\)。

Code

G - Slot Strategy 2 (Hard)

考虑枚举最终字符 \(d\),然后二分判定。

假设当前时间为 \(t\),那么对于每一行,下标在 \([1,t]\) 内值为 \(d\) 的位置都可以选。由于每个位置只能被一行选中,那么可以转换为一个二分图匹配问题:

以每一行为左部点,下标为右部点。对于每一行 \(i\),如果 \(s_{i,j}=d\) 且 \(j\le t\),那么连边 \(A_{i}\to B_{j}\),然后检查是否存在完美匹配即可。

这里需要注意一点,由于每个时间不能重复选,所以 \(t\) 最大会到 \(n\times m\) 级别,这需要我们隐式地将字符串 copy \(n\) 次。而且,此时二分图的点数和边数都是 \(O(nm)\) 级别,无法通过。

但是左部点数量很少,由 Hall 定理我们可以知道,只要满足 \(|T|\le |N_G(T)|\) 就一定存在完美匹配。因此对于每个左部点,只需要连出去 \(n\) 条边即可。

这样点数和边数就都降到了 \(O(n^2)\) 级别。总的时间复杂度是 \(O(n^3d\log(nm))\),就能过了。其中 \(d=10\)。

实现时我用了 map 给右部点标号,所以还要多个 \(\log\),但是跑不满,所以能过。

Code

标签:le,leftarrow,油量,min,FG,ge,ABC320,加油
From: https://www.cnblogs.com/syzqwq/p/18040457

相关文章

  • L-BFGS-B(Limited-memory Broyden–Fletcher–Goldfarb–Shanno )算法理解 —— 内存
    本文主要讲下个人对数值优化算法中几种常见算法的理解。什么是优化算法?给出函数f(X),现在要求minf(X)时的X值,这就是最优化问题。1.共轭梯度法方程:A*x=b,A矩阵为对称正定矩阵,b为向量,目标为求解出向量x。个人认为共轭梯度法并不能被当做是一个真正的优化算法,因为共轭梯度......
  • Cgdata.FastWpfGrid
    安装:Install-PackageCgdata.FastWpfGrid前台代码:xmlns:FastWpfGrid="clr-namespace:FastWpfGrid;assembly=FastWpfGrid"<FastWpfGrid:FastGridControlx:Name="grid1"IsReadOnly=&quo......
  • powercfg是一个Windows操作系统中的命令行工具,用于管理和配置电源设置。通过使用power
    powercfg是一个Windows操作系统中的命令行工具,用于管理和配置电源设置。通过使用powercfg命令,用户和系统管理员可以查询、更改、导出、导入电源计划设置,检查电池状态,以及分析系统能耗情况等。这个工具非常有用,尤其是在需要优化电池使用时间、调整电源计划以提高性能或节能时。为......
  • 字符串“getline”“fgets”“getchar”
    https://www.luogu.com.cn/problem/P8506?contestId=154692`include<bits/stdc++.h>usingnamespacestd;intmain(){intn;intcount=0;cin>>n;getchar();while(n--){chara[1000];fgets(a,sizeof(a),stdin);intflag=0;for(inti=0;a[i+1]!=......
  • UEFI引导双系统安装archlinux后安装windows8.1,os-prober无法探测,生成grub.cfg没有wind
    1.os-prober无法探测可能是os-prober未启用启用os-prober:sudovim/etc/default/grub添加:GRUB_DISABLE_OS_PROBER=false之后:sudogrub-mkconfig-o/boot/grub/grub.cfg会显示类似这样:Warning:os-proberwillbeexecutedtodetect otherbootablepartitions.It......
  • ICMP流量—CTFGHUB技能树
    简介ICMP(InternetControlMessageProtocol)互联网控制消息协议,和IP一层,但ICMP使用时必须增加IP报头。属于网络层协议,它用于TCP/IP网络中发送控制消息,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消......
  • 【JVM】记录一次线上服务频繁FGC的排查过程
    一.背景最近在Grafana关注到线上推送服务push-service在运行一段时间后,内存占用非常高,并且频繁发生FGC,这里记录下问题排查过程二.排查过程  推送服务主要作用为,消息推送,因此JVM内存这里分配的是Xmx和Xms均为2G1.首先在Grafana上的监控指标,可以看到FGC非常频繁......
  • [FortiGate] FG-VM安全防火墙初始化配置实例
    FortiGateFirewall是什么?FortiGate防火墙是一种网络安全设备,主要用于保护企业网络免受各种网络威胁和入侵。它具有以下主要功能:防火墙功能:FortiGate防火墙可以检测和阻止未经授权的网络流量,通过设置访问规则来控制网络流量的进出。它可以防止恶意入侵、拒绝服务和其他网络威胁。......
  • C 语言用户输入详解:scanf、fgets、内存地址解析及实用指南
    C语言中的用户输入您已经学习了printf()函数用于在C语言中输出值。要获取用户输入,可以使用scanf()函数://声明一个整数变量,用于存储我们从用户那里获得的数字intmyNum;//提示用户输入一个数字printf("请输入一个数字:\n");//获取并保存用户输入的数字scanf("%d"......
  • OpenEuler【NetworkManager】为什么ifcfg-ethX网卡配置文件修改后不生
    1问题现象修改/etc/sysconfig/network-scripts/ifcfg-ethX网卡配置文件中的ip地址后,重启NetworkManager服务,网卡ip未生效2问题原因在不重启系统的情况下,仅重启NetworkManager服务,它不会重新读取/etc/sysconfig/network-scripts/目录下的网卡配置文件并生效。可以通过以下几......