THUPC2023 初赛 背包

Posted nike0good

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了THUPC2023 初赛 背包相关的知识,希望对你有一定的参考价值。

[THUPC 2023 初赛] 背包

题目描述

本题中,你需要解决完全背包问题。

n n n 种物品,第 i i i 种物品单个体积为 v i v_i vi、价值为 c i c_i ci

q q q 次询问,每次给出背包的容积 V V V,你需要选择若干个物品,每种物品可以选择任意多个(也可以不选),在选出物品的体积的和恰好 V V V 的前提下最大化选出物品的价值的和。你需要给出这个最大的价值和,或报告不存在体积和恰好为 V V V 的方案。

为了体现你解决 NP-Hard 问题的能力, V V V 会远大于 v i v_i vi,详见数据范围部分。

输入格式

第一行两个整数 n , q n,q n,q,表示物品种数和询问次数。

接下来 n n n 行每行两个整数 v i , c i v_i,c_i vi,ci 描述一种物品。

接下来 q q q 行每行一个整数 V V V 描述一次询问中背包的体积。

输出格式

对于每组询问输出一行一个整数。若不存在体积和恰好为 V V V 的方案,输出 -1;否则输出最大的选出物品的价值和。

样例 #1

样例输入 #1

2 2
6 10
8 15
100000000001
100000000002

样例输出 #1

-1
187500000000

提示

样例解释 1

第二组询问的最优方案为:选择 3 3 3 个物品 1 1 1 12499999998 12499999998 12499999998 个物品 2 2 2

子任务

对于所有测试数据, 1 ≤ n ≤ 50 , 1 ≤ v i ≤ 1 0 5 , 1 ≤ c i ≤ 1 0 6 , 1 ≤ q ≤ 1 0 5 , 1 0 11 ≤ V ≤ 1 0 12 1 \\le n \\le 50, 1 \\le v_i \\le 10^5, 1 \\le c_i \\le 10^6, 1 \\le q \\le 10^5, 10^11 \\le V \\le 10^12 1n50,1vi105,1ci106,1q105,1011V1012

题目来源

来自 2023 清华大学学生程序设计竞赛暨高校邀请赛(THUPC2023)初赛。

题解等资源可在 https://github.com/THUSAAC/THUPC2023-Pre 查看。

(from luogu)

考虑 c p / v p c_p/v_p cp/vp 最大的item ( v p , c p ) (v_p,c_p) (vp,cp),最后的答案一定是尽量多取
i i i足够大时, f i + v p = f i + c p f_i+v_p=f_i+c_p fi+vp=fi+cp
考虑同余最短路,模 v p v_p vp
发现无法定义图中边的边权,最后会陷入无限负环,无法最短路。

f i = g i m o d    m + ⌊ i v p ⌋ ∗ c p f_i=g_i \\mod m + \\lfloor \\frac i v_p \\rfloor *c_p fi=gimodm+vpicp
对于 g i g_i gi求最短路
对于 f i f_i fi取物品 ( v x , c x ) (v_x,c_x) (vx,cx)并转移到 f j f_j fj
等价于 f i + c x = g i m o d    m + ⌊ i v p ⌋ ∗ c p + c x f_i+c_x=g_i \\mod m + \\lfloor \\frac i v_p \\rfloor *c_p+c_x fi+cx=gimodm+vpicp+cx
= g i m o d    m + c x + ( ⌊ i v p ⌋ − ⌊ i + v x v p ⌋ ) c p + ⌊ i + v x v p ⌋ ∗ c p =g_i \\mod m +c_x + (\\lfloor \\frac i v_p \\rfloor -\\lfloor \\frac i+v_x v_p \\rfloor )c_p+ \\lfloor \\frac i+v_x v_p \\rfloor *c_p =gimodm+cx+(⌊vpivpi+vx⌋)cp+vpi+vxcp

转移到 g j m o d    m + ⌊ j v p ⌋ ∗ c p g_j \\mod m + \\lfloor \\frac j v_p \\rfloor *c_p gjmodm+vpjcp

#include<bits/stdc++.h> 
using 

以上是关于THUPC2023 初赛 背包的主要内容,如果未能解决你的问题,请参考以下文章

Thupc礼?

数据结构与算法AcWing算法自学笔记总结

2023年NOC大赛加码未来编程赛道-初赛-Python(初中组-卷1)

算法(C++/图论)

2023第八届少儿模特明星盛典 福州赛区 初赛圆满收官

C语言 背包问题 递归算法