P1050清仓甩卖sale

时间限制 1000 ms内存限制 512 MiB通过率 —
显示算法标签贪心 · 排序 · 前缀和

【题目背景】

Celia 逛超市时,经常喜欢挑选性价比更高的商品,俗称为“物美价廉”。

【题目描述】

小 X 的促销计划十分成功,现在糖果店中只剩下了 nn 颗糖果,其中第 ii 颗糖果的原价为 wiw_i 元。为了尽快清空余货,小 X 为每颗糖果标出了清仓价格。第 ii 颗糖果的清仓价格viv_i 元,其中**vi{1,2}v_i\in\{1,2\}**。

小 R 带着 mm 元来到糖果店,可以任意选择若干颗糖果购买。所选糖果的清仓价格之和称为这次购买的总价格,原价之和称为这次购买的总价值。小 R 要求总价格不超过 mm,并希望总价值尽可能大。

你需要帮助小 R 求出能够得到的最大总价值

【输入格式】

本题包含多组测试数据。

从文件 sale.in\textbf{\textit{sale.in}} 中读入数据。

输入的第一行包含两个非负整数 c,Tc,T,分别表示测试点编号与测试数据组数。c=0c=0 表示该测试点为样例。

接下来依次输入每组测试数据。对于每组测试数据:

第一行包含两个正整数 n,mn,m,分别表示糖果数量与小 R 拥有的钱数。

第二行包含 nn 个正整数 w1,w2,,wnw_1,w_2,\ldots,w_n,其中 wiw_i 表示第 ii 颗糖果的原价。

第三行包含 nn 个正整数 v1,v2,,vnv_1,v_2,\ldots,v_n,其中 viv_i 表示第 ii 颗糖果的清仓价格

【输出格式】

输出到文件 sale.out\textbf{\textit{sale.out}} 中。

对于每组测试数据,输出一行一个非负整数,表示小 R 能够得到的最大总价值

【样例 1 输入】

0 15 58 7 10 5 61 2 2 1 2

【样例 1 输出】

25

【说明/提示】

【样例 1 解释】

小 R 可以购买第 1,2,31,2,3 颗糖果。这次购买的总价格1+2+2=51+2+2=5总价值8+7+10=258+7+10=25

可以证明,不存在总价值更大的合法购买方案。

【样例 2】

见选手目录下的 sale/sale2.in\textbf{\textit{sale/sale2.in}}sale/sale2.ans\textbf{\textit{sale/sale2.ans}}

该附加样例满足测试点 141\sim 4 的数据范围。

【样例 3】

见选手目录下的 sale/sale3.in\textbf{\textit{sale/sale3.in}}sale/sale3.ans\textbf{\textit{sale/sale3.ans}}

该附加样例满足测试点 9129\sim 12 的数据范围。

【样例 4】

见选手目录下的 sale/sale4.in\textbf{\textit{sale/sale4.in}}sale/sale4.ans\textbf{\textit{sale/sale4.ans}}

该附加样例满足测试点 131913\sim 19 的数据范围。

【样例 5】

见选手目录下的 sale/sale5.in\textbf{\textit{sale/sale5.in}}sale/sale5.ans\textbf{\textit{sale/sale5.ans}}

该附加样例满足测试点 202520\sim 25 的数据范围。

【数据范围】

NN 为单个测试点内所有测试数据的 nn 之和。

测试点编号nn\leq特殊性质
141\sim 42020
585\sim 82×1052\times 10^5对于所有 ii,均有 vi=1v_i=1
9129\sim 122×1052\times 10^5对于所有 ii,均有 vi=2v_i=2
131913\sim 192×1032\times 10^3
202520\sim 252×1052\times 10^5

对于所有测试数据,保证:

  • 0c250\leq c\leq251T5×1041\leq T\leq5\times10^4
  • 1n2×1051\leq n\leq2\times10^5N5×105N\leq5\times10^5
  • 1m2n1\leq m\leq2n
  • 对于所有 1in1\leq i\leq n,均有 1wi1091\leq w_i\leq10^9vi{1,2}v_i\in\{1,2\}

【题解】

已公开 1 篇题解,官方题解会优先显示。

查看题解