小S的货船租赁冒险 | 背包

问题描述

李华在码头租货船,有 Q 种货船可以租赁。第 i 种货船的数量为 m[i], 租赁价格为 v[i],载货量为 w[i]。求预算为 V 的情况下,李华租的货船载货量总和 W 最大为多少?

输入格式

共两行。

第 1 行为两个用空格分隔开的整数:Q(1 <= Q <= 50)V(1 <= V <= 4000)Q 表示货船种类数,V 表示李华的预算。

第 2 行到第 Q + 1 行是 Q 种货船的详细信息。第 i + 1(1 <= i <= Q) 行有三个用空格分隔开的整数:m[i](1 <= m[i] <= 1000)v[i](1 <= v[i] <= 100)w[i](1 <= w[i] <= 100) ,表示第 i 种货船的数量、租赁价格和载货量。

输出格式

输出李华预算为 V 的情况下,货船载货量总和 W 的最大值。

输入样例

多行文本

2 10

2 3 2

3 2 10

输出样例

32

题解:

传统的多次背包,原本背包每种物品只有一个,这里有多个。使用动态规划求解,在遍历每种物品时就进行一次数量循环,把每种数量都考虑到即可,和普通背包思路没有差别。

代码:

cpp 复制代码
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<iomanip>
#include<queue>
#include<stack>
#include<vector>
#include<unordered_set>
#include<unordered_map>
#include<map>
#include<set>
using namespace std;
typedef long long int ll;


int solution(int Q, int V, vector<vector<int>> ships) {
    vector<vector<int>> dp(51,vector<int>(4001,0));
    for(int i=0;i<Q;i++){
        for(int j=1;j<=V;j++){
            dp[i+1][j]=dp[i][j];
            for(int k=1;k<=ships[i][0];k++){
                if(k*ships[i][1]<=j){
                    dp[i+1][j]=max(dp[i+1][j],dp[i][j-k*ships[i][1]]+k*ships[i][2]);
                }
            }
        }
    }
    //cout << dp[Q][V] << "\n";
    return dp[Q][V];
}

int main() {
    vector<vector<int>> ships = {{2, 3, 2}, {3, 2, 10}};
    vector<vector<int>> ships2 = {{30, 141, 47}, {9, 258, 12}, {81, 149, 13}, {91, 236, 6}, {27, 163, 74}, {34, 13, 58}, {61, 162, 1}, {80, 238, 29}, {36, 264, 28}, {36, 250, 2}, {70, 214, 31}, {39, 116, 39}, {83, 287, 4}, {61, 269, 94}, {23, 187, 46}, {78, 33, 29}, {46, 151, 2}, {71, 249, 1}, {67, 76, 85}, {72, 239, 17}, {61, 256, 49}, {48, 216, 73}, {39, 49, 74}};
    cout << (solution(2, 10, ships) == 32) << endl;
    cout << (solution(23, 400, ships2) == 1740) << endl;

    return 0;
}
相关推荐
点纭1 小时前
C 语言 第七章 常用函数(3)
c语言·开发语言·算法·oracle·c#
程序员老陆1 小时前
std::experimental::when_any 深度解析:等待“第一个完成”的异步组合原语
c++·多线程
β添砖java2 小时前
机器学习2 KNN算法、距离度量、特征预处理、超参数选择、手写数字、鸢尾花
人工智能·算法·机器学习
TAN-90°-2 小时前
Deep Learning for Computer Vision——Generative Models 2
人工智能·深度学习·神经网络·算法·目标检测·机器学习·计算机视觉
Rabitebla2 小时前
【Linux系统编程】指令(三):创建、删除、复制、移动、看内容
linux·数据结构·c++·算法
程序员老陆2 小时前
CMake 常用关键字与命令全景:从 set到 target_link_options的现代工程视角
c++·cmake·程序开发
qq_410194292 小时前
.NET 8.0 下基于 PaddleOCRSharp 的离线文字识别落地指南
算法·.net
Omics Pro2 小时前
1个月2轮融资!长寿虚拟细胞
数据库·人工智能·算法·机器学习·自然语言处理
residual_fan2 小时前
航空发动机故障诊断专用智能体(六):实际机队健康管理中的应用考量与展望
人工智能·算法·数据挖掘·数据分析
码匠许师傅3 小时前
【C++三方组件】cxxopts:轻量首选的命令行解析
c++