G. 收集

由于稀有度相同的物品需要一起处理,我们先把他们聚集到一起。
类似这样:

vector<int> g[maxn];
...
{cin >> x >> c;g[c].push_back(x);
}

那么我们需要一个贪心的思路:

  • 肯定是按 ccc 从小往大收集的;
  • 对于相同的 ccc 收集完最后一个肯定是要么停留最左边要么停留在最右边

故设 dp(i,0)dp(i,0)dp(i,0) 表示收集完稀有度为 iii 的物品后停留在最左边,dp(i,1)dp(i,1)dp(i,1) 则表示停留在最右边。

对于转移,则是讨论一下:

  • 收集完第 i−1i-1i1 层的物品后,在最左边还是最右边,将来要停留在这一层的最左边还是最右边,即 dp(i−1,0/1)dp(i-1,0/1)dp(i1,0/1) 转移到 dp(i,0/1)dp(i,0/1)dp(i,0/1)

注意的是,可能存在某一层是没有物品的,而下一层是有物品的,需要存储上一层的 c,设其为 pre。则状态转移使用 dp[pre][]dp[pre][]dp[pre][] 而不是 dp[i−1][]dp[i-1][]dp[i1][]

#include <bits/stdc++.h>
using namespace std;
#define ll long longll a[200010][2], x;
ll dp[200010][2]; // dp[i][0]: 从小到大走;dp[i][1]:从大往小走
bool vis[200010];
int main() {int n, c;cin >> n;for (int i = 1; i <= n; ++i) {a[i][0] = INT_MAX; // c == i 的位置最小值a[i][1] = INT_MIN; // c == i 的位置最大值}for (int i = 1; i <= n; ++i) {cin >> x >> c;a[c][0] = min(a[c][0], x);a[c][1] = max(a[c][1], x);vis[c] = 1;}int p = 0; // 前一个 cvis[n + 1] = 1; // 最后一层回到位置 0, a[n+1][0] = a[n+1][1] = 0for (int i = 1; i <= n + 1; ++i) {if (!vis[i]) continue;for (int j = 0; j < 2; ++j) {dp[i][j] = min(abs(a[p][0] - a[i][j]) + dp[p][1], abs(a[p][1] - a[i][j]) + dp[p][0]) + a[i][1] - a[i][0]; }p = i;}cout << dp[n + 1][0] << endl;return 0;
}

H. 选择

对于每一个 iii,我们考虑让 aia_iaibib_ibi 之间建一条边,则这些边之间形成了若干个环
则原问题等价于对于每个环,任意两条相邻的边至少选一条,不同的环之间没有限制
dp 算出每个环选点的方案数,然后再乘起来,就是总的方案数

  • 相信大家都会做一排物品,相邻两件至少选一件,求方案数记作 f[i]

  • 现在处理环记作 g[i],将下面两个方案相加

    • 最后一个不选:f[i-3]
    • 最后一个选:f[i-1]

可以先递推计算 f,再递推计算 'g'

也可以整理得到: g[i] = f[i-3] + f[i-1] = (f[i-4]+f[i-5]) + (f[i-2]+f[i-3]) = (f[i-2]+f[i-4]) + (f[i-3]+f[i-5]) = g[i-1] + g[i-2]

#include <bits/stdc++.h>
using namespace std;using ll = long long;
const ll M = 998244353;
const int maxn = 2e5 + 10;// 相邻的数至少选一个
// 线性:f[i] = f[i-2] + f[i-1]
// 环形:g[i] = f[i-3] + f[i-1] --> g[i] = g[i-1] + g[i-2]
ll g[maxn];
int a[maxn], bi, nxt[maxn];
bool vis[maxn];
int main() {g[1] = 1, g[2] = 3;for (int i = 3; i < maxn; ++i) {g[i] = (g[i - 1] + g[i - 2]) % M;}int n, x, b;cin >> n;for (int i = 1; i <= n; ++i) cin >> a[i];for (int i = 1; i <= n; ++i) {cin >> bi;nxt[a[i]] = bi;}ll res = 1;for (int i = 1; i <= n; ++i) {if (!vis[i]) {int p = i, cnt = 0;while (!vis[p]) {vis[p] = 1, ++cnt;p = nxt[p];}res = res * g[cnt] % M;}}cout << res << endl;return 0;
}

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

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

相关文章

Django多表查询(ORM)

1、建立表结构 三个表&#xff1a;book、Author、publisher。 书籍和作者是多对多的关系&#xff0c;一本书可以有多个作者&#xff0c;一个作者可以有多本书。 出版社和书籍是一对多的关系&#xff0c;一个出版社可以出版多本书&#xff08;多方&#xff0c;多方定义外键&…

C# 集合表达式和展开运算符 (..) 详解

集合表达式 (Collection Expressions)基本语法支持的集合类型展开运算符 (..)基本用法实际应用示例创建新集合合并集合与现有API结合性能考虑高级用法多维集合自定义集合注意事项与传统方式的比较总结集合表达式 (Collection Expressions) C# 12 引入了集合表达式&#xff0c;…

数学视频动画引擎Python库 -- Manim Voiceover 安装 Installation

文中内容仅限技术学习与代码实践参考&#xff0c;市场存在不确定性&#xff0c;技术分析需谨慎验证&#xff0c;不构成任何投资建议。 Manim Voiceover 是一个为 Manim 打造的专注于语音旁白的插件&#xff1a; 直接在 Python 中添加语音旁白&#xff1a; 无需使用视频编辑器&…

Git安装避坑指南:新手村通关秘籍

Git安装避坑指南&#xff1a;新手村通关秘籍 刚学编程那会儿&#xff0c;Git安装差点让我砸键盘。满心欢喜打开官网下载&#xff0c;结果卡在配置上&#xff0c;命令行死活不认识git命令。看着教程里别人行云流水的操作&#xff0c;自己对着报错信息干瞪眼——这感觉&#xff…

如何修改Siteground max_execution_time值?

这个值在Siteground 上是修改不了的。 以下是来自Siteground 官网的解释&#xff1a; 由于服务器上全局定义的 PHP 限制&#xff0c;某些 PHP 设置无法更改。最常见的无法更改的 PHP 设置包括&#xff1a; memory_limit max_execution_time max_input_time post_max_size up…

【libm】 11 fmin函数 (fmin.rs)

一、源码 这段代码实现了一个符合 IEEE 754-2008 标准的 minNum 函数&#xff08;在 Rust 中命名为 fmin&#xff09;&#xff0c;该功能在 IEEE 754-2019 标准中已被 minimumNumber 取代。 /* SPDX-License-Identifier: MIT OR Apache-2.0 */ //! IEEE 754-2008 minNum. Thi…

React 英语单词消消乐一款专为英语学习设计的互动式记忆游戏

&#x1f4d6; 项目简介 英语单词消消乐 是一款专为英语学习设计的互动式记忆游戏。通过经典的消消乐玩法&#xff0c;让用户在轻松愉快的游戏中掌握英语单词&#xff0c;提高词汇量和记忆效果。 &#x1f3af; 项目目标 让英语学习变得有趣且高效通过游戏化方式增强单词记忆…

Qt:QPushButton、QRadioButton、QCheckBox

目录 一、QPushButton 1.认识QPushButton 2.设置按钮图标 3.设置按钮的快捷键 二、QRadioButton 常用的信号 按钮的分组 三、QCheckBox 一、QPushButton 1.认识QPushButton QPushButton继承自QWidget&#xff0c;所以在上一篇文章中介绍的QWidget的属性&#xff0c;理…

docker 无法拉取镜像解决方法

目录 我在omv中通过后台页面拉取alist镜像总是失败&#xff0c;原因千奇百怪 今天再战终于解决首先&#xff0c;到dockerhub找镜像和wiki进入docker账号设置 找到里面提示了登录操作和密码命令行中执行后会提示成功之后按需配置代理&#xff0c;同时检查自己的配置检查 Docker …

安卓10.0系统修改定制化_____安卓9与安卓10系统文件差异 有关定制选项修改差异

在修改安卓10的rom之前。我们需要对rom有简单的了解。区分安卓10与安卓9之间的差异。了解不同安卓版本之间系统文件的变化以及权限的区别。对于修改一些定制化选项有很大的辅助作用. 通过博文了解💝💝💝 1💝💝💝-----安卓10与安卓9之间文件实例对比 了解差异 …

HTML表单元素全面指南:从基础到实践

引言 HTML表单是网页开发中不可或缺的一部分&#xff0c;它为用户提供了与网站交互的途径。无论是简单的登录页面还是复杂的数据提交界面&#xff0c;表单元素都扮演着关键角色。本文将详细介绍各种HTML表单元素及其使用方法。 输入框(input元素) input元素是最基础也是最灵…

深度学习的核心理论与技术

理解深度学习的基本原理、核心算法和关键技术 深度学习的核心理论与技术前言一、深度学习核心理论1. 神经网络基础核心内容练习资源2. 反向传播与梯度下降核心内容练习资源3. 卷积神经网络&#xff08;CNN&#xff09;核心内容练习资源4. 循环神经网络&#xff08;RNN&#xff…

LinkedList 链表数据结构实现 (OPENPPP2)

&#x1f50d; LinkedList 链表数据结构实现 (OPENPPP2) &#x1f9f1; 1. 数据结构设计 LinkedListNode 结构 #mermaid-svg-XDJqt6cHMKxodJLG {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-XDJqt6cHMKxodJLG .er…

RPC/gRPC入门学习

一、RPC 1.1 RPC概念 RPC Remote Procedure Call, 即远程过程调用&#xff0c;是一种用于构建分布式系统的理念&#xff0c;在一些资料中被称为“请求-响应”协议。两个进程可以位于同一系统中&#xff0c;也可以位于不同的系统中&#xff0c;通过网络相互连接。 RPC使程…

租车小程序电动车租赁小程序php方案

电动车租赁小程序源码&#xff0c;开发语言后端php&#xff0c;前端uniapp。四个端&#xff1a;用户端门店端分销商端小程序&#xff0c;pc管理后台。一 用户端&#xff1a;可以扫门店码&#xff0c;进入门店详情页。也可以通过地图找车。或者门店列表进入&#xff0c;或者快速…

Python数据分析基础04:预测性数据分析

相关章节&#xff1a; 《Python数据分析基础03&#xff1a;探索性数据分析》 《python数据分析基础02&#xff1a;数据可视化分析》 《Python数据分析基础01&#xff1a;描述性统计分析》 预测性数据分析&#xff08;Predictive Analytics&#xff09; 的深度解析&#xff0…

PFAE(Pyramidal Frequency Attention Extraction)通过频域注意力机制提高边界模糊、遮挡等场景的的检测能力

在伪装物体检测中&#xff0c;现有方法多依赖空间局部特征&#xff0c;难以捕捉全局信息&#xff0c;而 Transformer 类方法计算成本高昂。频率域特征因具备全局建模能力&#xff0c;可有效抑制背景噪声、提升伪装物体语义清晰度&#xff0c;但频域与空域的频繁转换会增加计算复…

AE插件安装方法

Adobe After Effects简称AE&#xff0c;是adobe公司开发的一个视频剪辑及设计软件&#xff0c;AE软件能够实现对素材的非线性编辑而完成画面的组接&#xff0c;同时还能对任何一部分进行修改&#xff0c;达到想要的结果。AE含有很多脚本、常用的表达式和插件&#xff0c;做动画…

舵轮时钟-STM32-28路PWM--ESP8266-NTP时间

1.STM32--PWM生成STM32不具备如此多的PWM&#xff0c;因此采用软件定时器的方案实现&#xff1a;使用hal库实现&#xff1b;main.c#include "main.h"#define close1 500#define open 1500#define close 2500// 定时器中断配置&#xff08;以TIM2为例&#xff09; voi…

Redis的单线程和多线程(单Worker线程)

Redis的单线程和多线程 Redis6.0之前是单线程的&#xff0c;6.0之后是多线程的&#xff0c;我们先了解6.0版本之前的单线程Redis。但其实无论6.0之前还是6.0之后&#xff0c;redis用于工作的线程也只有一个&#xff0c;所以也可以说redis一直是单线程的。 Redis单线程 Redis 6.…