P9140 [THUPC 2023 初赛] 背包
prologue
这很难评(调了我 1h,我都想紫砂了。
还是典型得不重构就看不见系列。


analysis
如果我们还是一个正常人,那么我们大体上是能看到题目的加粗字,这个格式很明显符合我们的同余最短路的格式。(如若不知,请先出门直走)
然后我们就要考虑这个同余最短路的实现。这个题目不同于往常的同余最短路,而是新增了一个条件。除了显然得他是给到完全背包,我们决定用同余最短路解决之后,我们该考虑怎么让他这个完全背包利益最大化。
(不知道你们有没有,反正我学 01背包的时候是先教的我用单位价值进行排序然后一个一个加。)
我们就可以借助上述的贪心,先找到单位体积最大的即 \(\frac{c_i}{v_i}\),这个很好实现,即在实现输入的时候发现 \(\frac{c_i}{v_i} > \frac{w}{m}\),更新\(m\)、\(w\)即可,为了规避整数除法,我们将式子转换成 \(c_i \times m > w \times a_i\)就可以实现维护。
之后就是我们进行同余最短路的时候。
附上一句:同余最短路写最短路就好比打游戏玩原神。
下面不讲常规方法,讲的是转圈做法。(都 3202 年了你还不会转圈?那就赶紧左转或者右转到大佬的博客进行学习。)
之后是统计答案。(下面的过程参考了大佬的这篇博客,想看原汁原味的可以去这位大佬的博客中查看)
令 \(v \gets V \bmod m, v < V\),这个时候我们将考虑到最终最大值为 \(C + \frac{V - v}{m} \times w\),也就是我们要求 \(C - \frac{v}{m} \times w\) 最大。也就得到我们的转移方程:
\]
我们在查询答案的时候,如果这个位置的 f 值不为 \(-∞\) 就得到:
\]
code time
马蜂优良。
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define rl register ll
constexpr ll N = 55, M = 1e5 +10;
ll n, m = 1, q, a[N], f[M], c[N], ans, w;
inline ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }
int main()
{
// freopen("1.in", "r", stdin), freopen("1.out", "w", stdout);
cin >> n >> q;
for(rl i=1; i <= n; ++ i)
{
cin >> a[i] >> c[i];
if(w * a[i] < m * c[i]) w = c[i], m = a[i];
}
for(rl i=1; i < m; ++ i) f[i] = -1e18;
for(rl i=1; i <= n; ++ i)
for(rl j=0, lim = gcd(m, a[i]); j < lim; ++ j)
for(rl t = j, asd = 0; asd < 2; asd += t == j)
{
ll p = (t + a[i]) % m;
f[p] = max(f[p], f[t] + c[i] - ((t + a[i]) / m) * w), t = p;
}
while(q -- )
{
ll v; cin >> v;
ll p = v % m;
if(f[p] < -1e17) puts("-1");
else cout << f[p] + v / m * w << endl;
}
return 0;
}
P9140 [THUPC 2023 初赛] 背包的更多相关文章
- SCNU ACM 2016新生赛初赛 解题报告
新生初赛题目.解题思路.参考代码一览 1001. 无聊的日常 Problem Description 两位小朋友小A和小B无聊时玩了个游戏,在限定时间内说出一排数字,那边说出的数大就赢,你的工作是帮他 ...
- hdu4508 完全背包,湫湫系列故事——减肥记I
湫湫系列故事——减肥记I 对于01背包和完全背包,昨晚快睡着的时候,突然就来了灵感 区别:dp[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值 在第二重循环,01 是倒着循环的,因 ...
- 【完全背包】HDU 4508 湫湫系列故事——减肥记I
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Submission(s) ...
- 华南师大 2017 年 ACM 程序设计竞赛新生初赛题解
题解 被你们虐了千百遍的题目和 OJ 也很累的,也想要休息,所以你们别想了,行行好放过它们,我们来看题解吧... A. 诡异的计数法 Description cgy 太喜欢质数了以至于他计数也需要用质 ...
- NOIP2018TG 初赛复习
Date: 20180911 TCP/IP OSI7面向对象的程序设计语言 1.不是自顶向下2.simula 67语言 第一个3.继承性.封装性.多态性NOIP支持的语言环境:对于c / c++ :D ...
- HDUOJ----4501小明系列故事——买年货(三维背包)
小明系列故事——买年货 Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total ...
- NOIP 2018 提高组初赛解题报告
单项选择题: D 进制转换题,送分: D 计算机常识题,Python是解释运行的: B 常识题,1984年小平爷爷曰:“娃娃抓起”: A 数据结构常识题,带进去两个数据就可以选出来: D 历年真题没有 ...
- 百度之星2017初赛A-1005-今夕何夕
今夕何夕 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- NOIP2018初赛总结(提高组)(试题+答案+简要解析)
NOIP2018初赛总结(提高组) 更新完毕(纯手敲),如果有错误请在下面留言 单选题 T1.下列四个不同进制的数中,与其它三项数值上不相等的是 A.\((269)_{16}\) B.\((617)_ ...
- NOIP2018初赛 解题报告
前言 \(NOIP2018\)初赛已经结束了,接下来就要准备复赛了. 不过,在此之前,还是先为初赛写一篇解题报告吧. 单项选择题 送分题.(虽然我还是做错了)可以考虑将它们全部转化为\(10\)进制, ...
随机推荐
- React框架学习基础篇-HelloReact-01
一直想掌握一门前端技术,于是想跟着张天宇老师学习,便开始学习React,以此来记录一下我的学习之旅. 学习一门新的技术首先是去官网看看,React官网链接是[https://zh-hans.react ...
- 老生常谈:值类型 V.S. 引用类型
我在面试的时候经常会问一个问题:"谈谈值类型和引用的区别".对于这个问题,绝大部分人都只会给我两个简洁的答案:"值类型分配在栈中,引用类型分配在堆中",&quo ...
- 行行AI人才沙龙第1期:《AI大模型创业投资,哪里才是真风口?》
行行AI人才是博客园和顺顺智慧共同运营的AI行业人才全生命周期服务平台. 要说近期科技圈和投资圈"最靓的崽",那自然非"AI大模型"莫属.自ChatGPT发布以 ...
- 从GaussDB(DWS)的技术演进,看数据仓库的积淀与新生
摘要:随着云计算的兴起和渗透,云数仓成为了数仓技术演进的新阶段,并且逐渐成为了众多企业的共同选择. 本文分享自华为云社区<从GaussDB(DWS)的技术演进,看数据仓库的积淀与新生>,作 ...
- 【HTML】TinyMCE 编辑器
HTML编辑器 一.页面效果 二.引入JS.CSS <!DOCTYPE html> <html lang="en"> <head> <me ...
- Hugging News #0717: 开源大模型榜单更新、音频 Transformers 课程完成发布!
每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...
- 用极限网关实现 ES 容灾,简单!
身为 IT 人士,大伙身边的各种系统肯定不少吧.系统虽多,但最最最重要的那套.那几套,大伙肯定是捧在手心,关怀备至.如此重要的系统,万一发生故障了且短期无法恢复,该如何保障业务持续运行? 有过这方面思 ...
- C#.NET 国密SM4对称加解密 与JAVA互通 ver:20230731
C#.NET 国密SM4对称加解密 与JAVA互通 ver:20230731 .NET 环境:.NET6 控制台程序(.net core). JAVA 环境:JAVA8,带maven 的JAVA控制台 ...
- 【Qt6】QWidgetAction 的使用
在开始主题前,先看一个 C++ 例子: #include <iostream> struct Data { int a; int b; }; // 注意这里 struct Data *s; ...
- 解决Avalonia 11.X版本的中文字体问题
网上搜索的方法使用接口"IFontManagerImpl"这个方法目前只能用于Avalonia 10.X版本,因为11版本后官方把这个接口的成员都设置成了非plubic,所以之前的 ...