9748 宝物筛选--[中等]

描述

小鹿在洞穴内发现了王室的宝物,小鹿对洞穴里的宝物进行了整理,她发现每样宝物都有一件或者多件。他粗略估算了下每样宝物的价值,之后开始了宝物筛选工作:
小鹿有一个最大载重为 m 的采集车,洞穴里总共有 n 种宝物,每种宝物的价值为 vi​,重量为 w​i,每种宝物有 si ​件。小鹿希望在采集车不超载的前提下,选择一些宝物装进采集车,使得它们的价值和最大。

输入描述

第一行为一个整数 n 和 m,分别表示宝物种数和采集车的最大载重( 0≤m≤3×103 )。
接下来 n 行每行三个整数 vi​,wi​​,si​ ( n≤∑si​≤ 105)。

输出描述

输出仅一个整数,表示在采集车不超载的情况下收集的宝物的最大价值。

#include<bits/stdc++.h>
using namespace std;
long long n , m , w , v , s , dp[114514];
int main(){
std::ios::sync_with_stdio(false);
std::cin.tie(0);
std::cout.tie(0);
    cin>>n>>m;
    for(long long i = 0;i < n;i++){
        cin>>v>>w>>s;
        for(long long count = 1;s > 0;count*=2){
                    int num = min(count,s);
            int W = num*w;
            int V = num*v;
            //wbyas zyabxfacd
            
            for(long long j = m;j >= W;j--){
                dp[j] = max(dp[j],dp[j-W]+V);
            }
            s-=num;
        }
    }
    cout<<dp[m];
    return 0;
}

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值