NC235951 草药大师

题目

  • 原题地址:草药大师
  • 题目编号: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;
}
posted @   仪战群儒  阅读(92)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示