题目描述

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

有 \(n\) 种物品,第 \(i\) 种物品单个体积为 \(v_i\)、价值为 \(c_i\)。

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

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

输入格式

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

接下来 \(n\) 行每行两个整数 \(v_i,c_i\) 描述一种物品。

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

输出格式

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

样例 #1

样例输入 #1

2 2
6 10
8 15
100000000001
100000000002

样例输出 #1

-1
187500000000

提示

样例解释 1

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

子任务

对于所有测试数据,\(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}\)。

题目来源

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

思考当 \(V\) 非常大的时候,选的数有没有什么规律?

容易想到,一定有一个物品被选了很多次。结合 \(n\le50\),猜测需要去枚举哪种物品选择了很多次。

然后大概减到一定次数之内,就不一定是拼命选这个数了。预处理出 \(v_i\le 5\times 10^6\) 以内完全背包的答案。每次选物品选到容量小于等于 \(5\times 10^6\),然后就用完全背包的方法去选就行了。

#include<bits/stdc++.h>
using namespace std;
const int N=5e6+5,M=5e6;
int n,q;
long long s,dp[N],v[N],c[N],w,ans,k;
int main()
{
memset(dp,-0x7f,sizeof(dp));
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++)
scanf("%d%d",v+i,c+i);
dp[0]=0;
for(int i=1;i<=n;i++)
{
for(int j=v[i];j<N;j++)
dp[j]=max(dp[j],dp[j-v[i]]+c[i]);
}
while(q--)
{
scanf("%lld",&w);
ans=-1;
for(int i=1;i<=n;i++)
{
k=(w-M)/v[i]+1;;
ans=max(ans,k*c[i]+dp[w-k*v[i]]);
}
printf("%lld\n",ans);
}
}

[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. BUGKU逆向reverse 1-8题

    练习IDA两年半 打开尘封已久的bugku,从题目中练习使用,现在都已经是新版本了 orz 入门逆向 运行baby.exe将解压后的baby.exe拖到IDA里面主函数中找到mov指令 可以看到这里就 ...

  2. Flink-读Kafka写Hive表

    1. 目标 使用Flink读取Kafka数据并实时写入Hive表. 2. 环境配置 EMR环境:Hadoop 3.3.3, Hive 3.1.3, Flink 1.16.0   根据官网描述: htt ...

  3. Pytest 框架执行用例流程浅谈

    背景: 根据以下简单的代码示例,我们将从源码的角度分析其中的关键加载执行步骤,对pytest整体流程架构有个初步学习. 代码示例: import pytest def test_add(): asse ...

  4. 使用API接口获取淘宝商品数据的详细指南

    ​ 在电商行业中,淘宝作为中国最大的在线购物平台,每天有数以百万计的商品被发布和交易.作为程序员,如果需要获取淘宝商品的详细数据,可以通过调用API接口来实现.本文将详细介绍如何使用淘宝API接口获取 ...

  5. CSP-J/S 初赛冲刺

    CSP-J/S 初赛冲刺 对于咱们信奥选手来说,会做的题要坚决不丢分,不会做的题要学会尽量多拿分,这样你的竞赛之路才能一路亨通! Linux 基础操作 文件(文件夹)操作 列出文件:ls 列出隐藏文件 ...

  6. 路由器与交换机:Access/Trunk,Wan/Lan

    转载请注明出处: 1.交换机与路由器 交换机与路由器的特点: 交换机(Switch): 用于在局域网中传输数据帧 基于MAC地址进行转发和过滤 工作在数据链路层(第二层) 具有多个端口,可以连接多台计 ...

  7. Python 潮流周刊#21:如何提升及测量 Python 代码的性能?

    你好,我是猫哥.这里每周分享优质的 Python.AI 及通用技术内容,大部分为英文.标题取自其中三则分享,不代表全部内容都是该主题,特此声明. 本周刊由 Python猫 出品,精心筛选国内外的 25 ...

  8. 低代码引擎 TinyEngine 正式发布!

    在当今数字化飞速发展的时代,企业对高效.敏捷的应用程序需求日益旺盛.为了满足这一需求,越来越多的低代码开发平台开始涌现.这些平台通过提供简单易用的开发工具和优化后的开发流程,帮助开发者快速构建高质量. ...

  9. Pandas 读取 Excel 斜着读

    读取 Excel 斜着读数据 import pandas as pd def read_sideling(direction, sheet_name, row_start, col_start, ga ...

  10. Git小白入坑总结(部分)

    本地仓库的创建和初始化 git操作远程仓库 git clone git pull git push 对Git连接GitHub过程的理解 本地仓库的创建和初始化 直接在对应文件夹下用git init可以 ...