HJ16 购物单

简介: HJ16 购物单

题目

题目连接

示例1

输入:
  1000 5
  800 2 0
  400 5 1
  300 5 1
  400 3 0
  500 2 0
输出:2200

示例2

输入:
  50 5
  20 3 5
  20 3 5
  10 3 0
  10 2 0
  10 1 0
输出:130
说明:
由第1行可知总钱数N为50以及希望购买的物品个数m为5;
第2和第3行的q为5,说明它们都是编号为5的物品的附件;
第4~6行的q都为0,说明它们都是主件,它们的编号依次为3~5;
所以物品的价格与重要度乘积的总和的最大值为10*1+20*3+20*3=130    

解题

方法一:分组背包

参考链接

#include<iostream>
#include<math.h>
#include<vector>
using namespace std;
int main(){
    int N,m;//N:总钱数  m:可以购买的物品数
    cin>>N>>m;
    vector<vector<int>> prices(m+1,vector<int>(3,0));//价格  (m+1,3)  其中vector<int>(3)中[0]表示主件,[1]、[2]表示附件
    vector<vector<int>> values(m+1,vector<int>(3,0));//价值   :价格*重要程度
    N/=10;//由于价格是10的整数倍,处理一下以降低空间/时间复杂度
    for(int i=1;i<=m;i++){
        int a,b,c;
        cin>>a>>b>>c;
        a/=10;
        b*=a;
        if(c==0){//主件
            prices[i][0]=a;
            values[i][0]=b;
        }else{//附件
            if(prices[c][1]==0){
                prices[c][1]=a;
                values[c][1]=b;
            }else{
                prices[c][2]=a;
                values[c][2]=b;
            }
        }
    }
    //使用分组背包
    vector<vector<int>> dp(m+1,vector<int>(N+1));
    for(int i=1;i<=m;i++){
        for(int j=1;j<=N;j++){
            int a=prices[i][0],b=values[i][0];
            int c=prices[i][1],d=values[i][1];
            int e=prices[i][2],f=values[i][2];
            dp[i][j]=j>=a?max(dp[i-1][j-a]+b,dp[i-1][j]):dp[i-1][j];
            dp[i][j]=j>=(a+c)?max(dp[i-1][j-a-c]+b+d,dp[i][j]):dp[i][j];
            dp[i][j]=j>=(a+e)?max(dp[i-1][j-a-e]+b+f,dp[i][j]):dp[i][j];
            dp[i][j]=j>=(a+c+e)?max(dp[i-1][j-a-c-e]+b+d+f,dp[i][j]):dp[i][j];
        }
    }
    cout<<dp[m][N]*10<<endl;
}
相关文章
|
6月前
|
存储 人工智能 监控
大牛直播SDK在四足机器人和无人机巡检中的创新应用方案
在工业4.0和智能化浪潮下,传统巡检方式正经历深刻变革。四足机器人与无人机凭借灵活机动性和高效巡检能力崭露头角,而大牛直播SDK则赋予其实时直播与智能互动功能。本文介绍大牛直播SDK的核心优势、在四足机器人和无人机巡检中的应用方案,以及技术实现要点和未来展望,展示智能巡检的广阔前景。
151 6
|
数据挖掘
基于PaddlePaddle的中风患者线性模型预测
基于PaddlePaddle的中风患者线性模型预测
114 0
|
算法 数据挖掘 数据处理
豆瓣评分8.7!Python pandas创始人亲码的数据分析入门手册!
在众多解释型语言中,Python最大的特点是拥有一个巨大而活跃的科学计算社区。进入21世纪以来,在行业应用和学术研究中采用python进行科学计算的势头越来越猛。 近年来,由于Python有不断改良的库(主要是pandas),使其成为数据处理任务的一大代替方案,结合其在通用编程方面的强大实力,完全可以只使用Python这一种语言去构建以数据为中心的应用程序。 作为一个科学计算平台,Python的成功源于能够轻松的集成C、C++以及Fortran代码。大部分现代计算机环境都利用了一些Fortran和C库来是西安线性代数、优选、积分、快速傅里叶变换以及其他诸如此类的算法。
|
数据采集 分布式计算
MapReduce【数据清洗】
MapReduce【数据清洗】
|
Java 开发者
Java中的类和接口详解
Java中的类和接口详解
|
存储 SQL 算法
LeetCode题目44:通配符匹配【python】
LeetCode题目44:通配符匹配【python】
|
负载均衡 算法 Java
Ribbon的负载均衡策略
Ribbon的负载均衡策略
163 2
|
算法 测试技术
【动态规划】【字符串】【行程码】1531. 压缩字符串
【动态规划】【字符串】【行程码】1531. 压缩字符串
|
数据采集 Java 测试技术
Vue+SpringBoot打造电子元器件管理系统(附源码文档)(二)
Vue+SpringBoot打造电子元器件管理系统(附源码文档)
293 0
|
JavaScript
Vue框架Element UI教程-时间选择器(二)
Vue框架Element UI教程-时间选择器(二)
136 0