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_p \gets f_t + c[i] - ((t + a[i]) / m) \times w, t = p
\]

我们在查询答案的时候,如果这个位置的 f 值不为 \(-∞\) 就得到:

\[ans \gets f[p] + \frac{v}{m} \times w
\]

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 初赛] 背包的更多相关文章

  1. SCNU ACM 2016新生赛初赛 解题报告

    新生初赛题目.解题思路.参考代码一览 1001. 无聊的日常 Problem Description 两位小朋友小A和小B无聊时玩了个游戏,在限定时间内说出一排数字,那边说出的数大就赢,你的工作是帮他 ...

  2. hdu4508 完全背包,湫湫系列故事——减肥记I

    湫湫系列故事——减肥记I 对于01背包和完全背包,昨晚快睡着的时候,突然就来了灵感 区别:dp[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值 在第二重循环,01 是倒着循环的,因 ...

  3. 【完全背包】HDU 4508 湫湫系列故事——减肥记I

    Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submission(s) ...

  4. 华南师大 2017 年 ACM 程序设计竞赛新生初赛题解

    题解 被你们虐了千百遍的题目和 OJ 也很累的,也想要休息,所以你们别想了,行行好放过它们,我们来看题解吧... A. 诡异的计数法 Description cgy 太喜欢质数了以至于他计数也需要用质 ...

  5. NOIP2018TG 初赛复习

    Date: 20180911 TCP/IP OSI7面向对象的程序设计语言 1.不是自顶向下2.simula 67语言 第一个3.继承性.封装性.多态性NOIP支持的语言环境:对于c / c++ :D ...

  6. HDUOJ----4501小明系列故事——买年货(三维背包)

    小明系列故事——买年货 Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total ...

  7. NOIP 2018 提高组初赛解题报告

    单项选择题: D 进制转换题,送分: D 计算机常识题,Python是解释运行的: B 常识题,1984年小平爷爷曰:“娃娃抓起”: A 数据结构常识题,带进去两个数据就可以选出来: D 历年真题没有 ...

  8. 百度之星2017初赛A-1005-今夕何夕

    今夕何夕 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  9. NOIP2018初赛总结(提高组)(试题+答案+简要解析)

    NOIP2018初赛总结(提高组) 更新完毕(纯手敲),如果有错误请在下面留言 单选题 T1.下列四个不同进制的数中,与其它三项数值上不相等的是 A.\((269)_{16}\) B.\((617)_ ...

  10. NOIP2018初赛 解题报告

    前言 \(NOIP2018\)初赛已经结束了,接下来就要准备复赛了. 不过,在此之前,还是先为初赛写一篇解题报告吧. 单项选择题 送分题.(虽然我还是做错了)可以考虑将它们全部转化为\(10\)进制, ...

随机推荐

  1. ShardingSphere5入门到实战

    ShardingSphere5入门到实战 第01章 高性能架构模式 互联网业务兴起之后,海量用户加上海量数据的特点,单个数据库服务器已经难以满足业务需要,必须考虑数据库集群的方式来提升性能.高性能数据 ...

  2. Python 一大坑,配置文件中字典引用问题(拷贝)。

    大坑 +1 python 配置文件中字典引用问题 最近在开发系统时发现一个传奇的BUG, 用户未登录就可进入系统内,而且含有真实身份信息. 此问题困扰多时,反复debug.由于找不到问题原因,复现具有 ...

  3. Java 新的选择,Solon v2.3.7 发布

    Solon 是什么开源项目? 一个,Java 新的生态型应用开发框架.它从零开始构建,有自己的标准规范与开放生态(历时五年,已有全球第二级别的生态规模).与其他框架相比,它解决了两个重要的痛点:启动慢 ...

  4. CSS border(边框)

    CSS 边框属性 CSS边框属性允许你指定一个元素边框的样式和颜色. 可以为上下左右每个框 定制不同的样式和颜色. 边框样式 边框样式属性指定要显示什么样的边界. border-style属性用来定义 ...

  5. vue3中使用defineExpose报TS-2339

    开头先把错误贴上 src/hooks/usePageSearch.ts:9:27 TS2339: Property 'getPageData' does not exist on type '{ $: ...

  6. P5752 [NOI1999] 棋盘分割题解

    本文来自我的洛谷博客. 这个题解思路虽然与其他人的思路相同, 但力求使用清晰易懂的图片和文字,讲解最简洁的道理. 请大家耐心地看完,注意要结合图片一起哦~~ 2022-8-24 更改了格式与错别字. ...

  7. Semantic Kernel(语义内核)秋季路线图

    Semantic Kernel 是一个开源的 SDK,它允许开发人员将大型语言模型(LLM)与传统的编程语言进行混合使用. 微软Semantic Kernel团队 在博客上正式公布了Semantic ...

  8. 一文详解自然语言处理两大任务与代码实战:NLU与NLG

    自然语言处理(NLP)涵盖了从基础理论到实际应用的广泛领域,本文深入探讨了NLP的关键概念,包括词向量.文本预处理.自然语言理解与生成.统计与规则驱动方法等,为读者提供了全面而深入的视角. 作者 Te ...

  9. 华为云GaussDB(for Influx)单机版上线,企业降本增效利器来了

    本文分享自华为云社区<华为云GaussDB(for Influx)单机版上线,企业降本增效利器来了>,作者:GaussDB 数据库 . 1.背景 华为云GaussDB(for Influx ...

  10. 开机自动打开termux以及启动termux的服务

    ps:因为我们的服务是安装在平板上面的termux,客户不想维护麻烦,如果平板重启之后还需要手动启动ternux,还要开启命令启动服务,这样比较麻烦,所以研究如下操作 1.安装macroDroid 直 ...