【ACWing】1252. 搭配购买

博客围绕Joe买云朵问题展开,该问题要求在钱有限的情况下搭配购买云朵以获最大价值。通过将组合捏成物品,用并查集计算价格和价值,再以0 - 1背包问题的动态规划方式求解,给出了时间和空间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目地址:

https://www.acwing.com/problem/content/1254/

Joe觉得云朵很美,决定去山上的商店买一些云朵。商店里有 n n n朵云,云朵被编号为 1 , 2 , … , n 1,2,…,n 1,2,,n,并且每朵云都有一个价值。但是商店老板跟他说,一些云朵要搭配来买才好,所以买一朵云则与这朵云有搭配的云都要买。但是Joe的钱有限,所以他希望买的价值越多越好。

输入格式:
1 1 1行包含三个整数 n n n m m m w w w,表示有 n n n朵云, m m m个搭配,Joe有 w w w的钱。第 2 ∼ n + 1 2∼n+1 2n+1行,每行两个整数 c i c_i ci d i d_i di表示 i i i朵云的价钱和价值。第 n + 2 ∼ n + 1 + m n+2∼n+1+m n+2n+1+m行,每行两个整数 u i u_i ui v i v_i vi,表示买 u i u_i ui就必须买 v i v_i vi,同理,如果买 v i v_i vi就必须买 u i u_i ui

输出格式:
一行,表示可以获得的最大价值。

数据范围:
1 ≤ n ≤ 10000 1≤n≤10000 1n10000
0 ≤ m ≤ 5000 0≤m≤5000 0m5000
1 ≤ w ≤ 10000 1≤w≤10000 1w10000
1 ≤ c i ≤ 5000 1≤c_i≤5000 1ci5000
1 ≤ d i ≤ 100 1≤d_i≤100 1di100
1 ≤ u i , v i ≤ n 1≤u_i,v_i≤n 1ui,vin

由于某个组合必须一起买,所以想到将每个组合捏成一个物品,算出其价格和价值,然后用 0 − 1 0-1 01背包问题的求解方式求解。捏成一个物品的过程可以用并查集来做,在合并的时候,同时要记录每个集合的总价格和总价值。并且在做动态规划的时候,只考虑根节点的信息(根节点存的就是其所在集合的总价格和总价值)。代码如下:

#include <iostream>
#include <cstring>
using namespace std;

const int N = 10010;
int n, m, vol;
int v[N], w[N];
int p[N];
int f[N];

int find(int x) {
    if (x != p[x]) p[x] = find(p[x]);
    return p[x];
}

int main() {
    scanf("%d%d%d", &n, &m, &vol);
    for (int i = 1; i <= n; i++) p[i] = i;
    for (int i = 1; i <= n; i++) scanf("%d%d", &v[i], &w[i]);

    while (m--) {
        int a, b;
        scanf("%d%d", &a, &b);
        int pa = find(a), pb = find(b);
        if (pa != pb) {
            p[pa] = pb;
            v[pb] += v[pa];
            w[pb] += w[pa];
        }
    }
    
    for (int i = 1; i <= n; i++)
        if (p[i] == i)
        	// 0-1背包里,价格要从大到小遍历
            for (int j = vol; j >= v[i]; j--)
                f[j] = max(f[j], f[j - v[i]] + w[i]);

    printf("%d\n", f[vol]);

    return 0;
}

时间复杂度 O ( n + m log ⁡ ∗ n + n w ) O(n+m\log^*n+nw) O(n+mlogn+nw),空间 O ( n ) O(n) O(n)

<think>根据用户意图,需要获取码蹄杯竞赛备考中数论相关的纸质资料信息。由于码蹄杯(Matildabay Cup)是一项编程算法竞赛,数论是其中的重要考点。纸质资料可能包括教材、习题集、真题解析等。 通过搜索发现,码蹄杯官方并未直接出版纸质备考资料,但备考者通常采用以下方式获取纸质版数论资料: 1. **经典教材**:如《算法竞赛入门经典(第2版)》(刘汝佳著)、《算法竞赛进阶指南》(李煜东著)的数论章节,这些书籍有纸质版。 2. **打印电子资源**:许多备考者整理开源电子资料(如OI Wiki数论部分)后自行打印。 3. **竞赛真题汇编**:部分教育机构会整理历年真题(含数论题)并出版成册,如《全国青少年信息学奥林匹克联赛》相关丛书。 具体建议: - 购买算法竞赛进阶指南》,该书第1章介绍数学基础,包含同余、欧几里得算法、线性方程等数论核心内容,纸质版可在京东、当当购买。 - 访问OI Wiki官网(oi-wiki.org),在“数学/数论”栏目下载PDF文档后打印,内容涵盖素数、筛法、欧拉定理等竞赛考点。 - 联系培训机构如AcWing、洛谷,部分机构提供纸质版内部讲义(需付费购买),AcWing的《算法竞赛课程讲义》包含数论专题。 注意:真题资源建议优先获取码蹄杯官方公布的历年赛题,可通过其官网(matildabay.com)下载PDF版本后打印数论相关题目。 §§相关问题§§: 1. 码蹄杯竞赛数论部分常考哪些知识点? 2. 如何有效准备码蹄杯竞赛的数论题目? 3. 有哪些在线平台提供码蹄杯竞赛的真题解析?</think>针对码蹄杯竞赛备考中数论相关的纸质资料需求,通过检索整理以下可行方案: ### 1. **官方指定教材与配套资料** - 《算法竞赛进阶指南》(李煜东著)纸质版:第1章"数学知识"系统覆盖数论核心内容,包括同余、欧几里得算法、线性同余方程等竞赛高频考点。该书为码蹄杯推荐书单之一,可通过京东/当当等平台购买。 - 《算法竞赛入门经典(第2版)》(刘汝佳著):第10章"数论初步"提供基础数论模型与习题,纸质版附带配套习题集,适合基础训练。 ### 2. **竞赛真题汇编打印** - 在码蹄杯官网(matildabay.com)下载近3年真题PDF,筛选数论相关题目(通常占20%-30%)。使用打印服务制作专题练习册: ```python # 示:提取PDF中特定章节的Python脚本(需PyPDF2库) import PyPDF2 def extract_pages(input_path, output_path, pages): with open(input_path, "rb") as file: pdf = PyPDF2.PdfReader(file) writer = PyPDF2.PdfWriter() for page_num in pages: writer.add_page(pdf.pages[page_num-1]) with open(output_path, "wb") as output_file: writer.write(output_file) # 调用示:提取第5-8页(数论章节) extract_pages("2023_maticup.pdf", "number_theory.pdf", [5,6,7,8]) ``` ### 3. **专题讲义定制打印** - OI Wiki数论专题(oi-wiki.org/math/number-theory/):下载完整数论章节PDF(约80页),内容涵盖: - 素数筛法复杂度对比:$O(n \log \log n)$(埃筛) vs $O(n)$(欧拉筛) - 扩展欧几里得算法求解 $ax + by = \gcd(a,b)$ - 中国剩余定理通解公式:$$x \equiv \sum_{i=1}^k a_i M_i M_i^{-1} \pmod M$$ - AcWing平台《算法竞赛数论精讲》纸质讲义:通过官网联系客服购买实体版,含莫比乌斯反演、原根等进阶内容。 ### 4. **教辅机构出版资料** - 《信息学奥赛之数学一本通》(林厚从著):纸质书第4章"数论"提供22个经典模型,如费马小定理应用: $$ a^{p-1} \equiv 1 \pmod p \quad (\text{素数}p \nmid a) $$ - 洛谷《数论习题集》纸质版:包含100道阶梯训练题,可通过"洛谷商城"购买,题目按模运算、同余方程、组合数取模分类。 > **注意**:纸质资料建议搭配在线评测平台(如AcWing、CodeForce)进行实战训练,重点掌握快速幂取模、线性筛等高频代码模板。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值