CF294B Shaass and Bookshelf (贪心,dp,01背包)

在这里插入图片描述
在这里插入图片描述

Sloution

背包+贪心的思想
背包的基本模型一般不难,
但是如何从题目去构造出背包的模型比较难

这题就是先用贪心的思想,去简化问题
(然后,发现简化后的问题是一个背包)

当然,这题数据量比较小,也可以直接暴力

#include <iostream>
#include <cstring>
#include <string>
#include<algorithm>
#include<cmath>
#include<set>
#define ll long long
#define PII pair<int, int>
#define _for(i, a, b) for (int i =<
`bookshelf.push_back(b);` 这行代码通常是在 C++ 语言中使用,`push_back` 是标准库容器(如 `std::vector`、`std::list` 等)的一个成员函数。下面详细解释其含义、使用场景和可能存在的问题。 ### 含义 `push_back` 函数用于在容器的末尾添加一个新元素。在 `bookshelf.push_back(b);` 中,`bookshelf` 是一个容器对象,`b` 是要添加到容器中的元素。例如,若 `bookshelf` 是一个 `std::vector<Book>` 类型的容器,`b` 是一个 `Book` 类型的对象,那么这行代码会将 `b` 对象添加到 `bookshelf` 容器的末尾。 ### 示例代码 ```cpp #include <iostream> #include <vector> // 假设 Book 是一个自定义类 class Book { public: std::string title; Book(const std::string& t) : title(t) {} }; int main() { std::vector<Book> bookshelf; Book b("C++ Primer"); bookshelf.push_back(b); for (const auto& book : bookshelf) { std::cout << book.title << std::endl; } return 0; } ``` ### 使用场景 - **动态添加元素**:当需要动态地向容器中添加元素,且不知道最终元素数量时,使用 `push_back` 很方便。例如,在读取文件中的书籍信息时,每读取一条信息就可以使用 `push_back` 将其添加到容器中。 - **模拟栈或队列**:在模拟栈(后进先出)或队列(先进先出)的操作时,`push_back` 可以用于向栈或队列中添加元素。 ### 注意事项 - **性能问题**:对于 `std::vector` 容器,当容器的容量不足时,`push_back` 可能会导致容器重新分配内存并复制原有元素,这会带来一定的性能开销。如果预先知道元素的大致数量,可以使用 `reserve` 函数预先分配足够的内存,减少内存重新分配的次数。 ```cpp std::vector<Book> bookshelf; bookshelf.reserve(100); // 预先分配 100 个元素的空间 ``` - **对象拷贝**:`push_back` 会对传入的对象进行拷贝。如果对象较大,频繁的拷贝操作会影响性能。可以考虑使用 `emplace_back` 函数,它可以直接在容器的末尾构造对象,避免拷贝操作。 ```cpp std::vector<Book> bookshelf; bookshelf.emplace_back("Effective C++"); // 直接构造对象 ``` - **容器类型限制**:`push_back` 是部分容器的成员函数,不是所有容器都支持。例如,`std::array` 是固定大小的容器,不支持 `push_back` 操作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值