
有n种草药,收集第i种草药需要花费t_i的时间,能够带来v_i的价值,每种草药只能收集一次。为了成为草药大师,你需要一个人收集草药。请问在S的时间内,你最多能收集价值和多大的草药。
题目
- 原题地址:草药大师
- 题目编号:NC235951
- 题目类型:DP、Map、map优化超大背包
- 时间限制:C/C++ 1秒,其他语言2秒
- 空间限制:C/C++ 262144K,其他语言524288K
1.题目大意
- 有 n 种草药,收集第 i 种草药需要花费 ti 的时间,能够带来 vi 的价值,每种草药只能收集一次。为了成为草药大师,你需要一个人收集草药。请问在 S 的时间内,你最多能收集价值和多大的草药。
2.题目分析
- 用上
map
写个dp即可
- 新知识点:反向迭代器
c.rbegin();c.rend()
3.题目代码
#include <bits/stdc++.h>
#define ll long long
#define x first
using namespace std;
ll n, s, t, v;
map<ll,ll> a;
int main() {
cin >> n >> s, a[0]=0;
while(n--) {
cin >> t >> v;
for(auto b=a.rbegin();b!=a.rend();b++) if(b->x+t<=s)
a[b->x+t] = max(a[b->x+t],a[b->x]+v);
} for(auto b:a) n = max(n,b.second);
cout << n << endl;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】