洛谷 P1064 [NOIP2006 提高组] 金明的预算方案 python解析

P1064 [NOIP2006 提高组] 金明的预算方案

时间:2023.11.19
题目地址:[NOIP2006 提高组] 金明的预算方案

题目分析

动态规划的0-1背包,采用动态数组。如果不了解的话,可以先看看这个背包DP。
这个是0-1背包的标准状态转移方程 f [ j ] = m a x ( f [ j − w [ i ] ] + v [ i ] , f [ j ] ) f[j] = max(f[j-w[i]] + v[i], f[j]) f[j]=max(f[jw[i]]+v[i],f[j])。那么就基于对这个方程进行展开。
五种情况:
① 不放。
m a x ( ) max() max()
② 放主物品,不带副品。
f [ j ] = f [ j ] = m a x ( f [ j − m a i n _ a r t [ i ] [ 0 ] ] + m a i n _ a r t [ i ] [ 1 ] , f [ j ] ) f[j] = f[j] = max(f[j-main\_art[i][0]] + main\_art[i][1], f[j]) f[j]=f[j]=max(f[jmain_art[i][0]]+main_art[i][1],f[j])
③ 放主物品,带1副品。
f [ j ] = m a x ( f [ j ] , f [ j − m a i n _ a r t [ i ] [ 0 ] − r a l _ a r t [ i ] [ 1 ] [ 0 ] ] + m a i n _ a r t [ i ] [ 1 ] + r a l _ a r t [ i ] [ 1 ] [ 1 ] ) f[j] = max(f[j], f[j-main\_art[i][0]-ral\_art[i][1][0]] + main\_art[i][1] + ral\_art[i][1][1]) f[j]=max(f[j],f[jmain_art[i][0]ral_art[i][1][0]]+main_art[i][1]+ral_art[i][1][1])
④ 放主物品,带2副品。
f [ j ] = m a x ( f [ j ] , f [ j − m a i n _ a r t [ i ] [ 0 ] − r a l _ a r t [ i ] [ 2 ] [ 0 ] ] + m a i n _ a r t [ i ] [ 1 ] + r a l _ a r t [ i ] [ 2 ] [ 1 ] ) f[j] = max(f[j], f[j-main\_art[i][0]-ral\_art[i][2][0]] + main\_art[i][1] + ral\_art[i][2][1]) f[j]=max(f[j],f[jmain_art[i][0]ral_art[i][2][0]]+main_art[i][1]+ral_art[i][2][1])
⑤ 放主物品,带1、2副品。
f [ j ] = m a x ( f [ j ] , f [ j − m a i n _ a r t [ i ] [ 0 ] − r a l _ a r t [ i ] [ 1 ] [ 0 ] − r a l _ a r t [ i ] [ 2 ] [ 0 ] ] + m a i n _ a r t [ i ] [ 1 ] + r a l _ a r t [ i ] [ 1 ] [ 1 ] + r a l _ a r t [ i ] [ 2 ] [ 1 ] ) f[j] = max(f[j], f[j-main\_art[i][0]-ral\_art[i][1][0]-ral\_art[i][2][0]] + main\_art[i][1] + ral\_art[i][1][1] + ral\_art[i][2][1]) f[j]=max(f[j],f[jmain_art[i][0]ral_art[i][1][0]ral_art[i][2][0]]+main_art[i][1]+ral_art[i][1][1]+ral_art[i][2][1])
这些理解清楚了就简单了。
但是超时了三个,enmm…,有点那啥,主要是理解思路和过程,掌握方法好吧。
1

代码

n, m = map(int, input().split())
main_art = [[] for _ in range(m+1)]
ral_art = [[0, [0]*2, [0]*2] for _ in range(m+1)] 
# 例:[[0, [0, 0], [0, 0]], [1, [300, 600], [0,0]], [2, [200, 400], [100, 400]]]
for i in range(1, m+1):
    v, p, q = map(int, input().split())
    if q == 0:
        main_art[i] = [v, p*v]
    else:
        ral_art[q][0] += 1
        ral_art[q][ral_art[q][0]][0] = v
        ral_art[q][ral_art[q][0]][1] = v*p
        
f = [0]*(n+1)
for i in range(1, m+1):
    if not main_art[i]:
        continue
    for j in range(n, main_art[i][0]-1, -1):
        f[j] = max(f[j-main_art[i][0]] + main_art[i][1], f[j])
        if j >= main_art[i][0] + ral_art[i][1][0]: # 判断剩余钱(空间)能否买(放)这个物品。
            f[j] = max(f[j], f[j-main_art[i][0]-ral_art[i][1][0]] + main_art[i][1] + ral_art[i][1][1])
        if j >= main_art[i][0] + ral_art[i][2][0]: # 判断剩余钱(空间)能否买(放)这个物品。
            f[j] = max(f[j], f[j-main_art[i][0]-ral_art[i][2][0]] + main_art[i][1] + ral_art[i][2][1])
        if j >= main_art[i][0] + ral_art[i][1][0] + ral_art[i][2][0]: # 判断剩余钱(空间)能否买(放)这个物品。
            f[j] = max(f[j], f[j-main_art[i][0]-ral_art[i][1][0]-ral_art[i][2][0]] + main_art[i][1] + ral_art[i][1][1] + ral_art[i][2][1])
print(f[n])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/164482.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

域名的理解

域名的分类 见下图 这里引用的阿里云对域名的定义,个人理解是有两种叫法,一种是传统的叫法,也就是将sample.org.cn划分成了三级域名,还有一种叫法是基于用户注册的域名来说的,将用户注册的整体域名称作一级域名&…

SOME/IP 协议介绍(五)指南

指南(信息性) 选择传输协议 SOME/IP直接支持互联网上使用最广泛的两种传输协议:用户数据报协议(UDP)和传输控制协议(TCP)。UDP是一种非常简洁的传输协议,仅支持最重要的功能&#…

Java Swing实现简单的文本编辑器

内容要求 1) 本次程序设计是专门针对 Java 课程的,要求使用 Java 语言进行具有一定代码量的程序开发。程序的设计要结合一定的算法,在进行代码编写前要能够设计好自己的算法。 本次程序设计涉及到 Java 的基本语法,即课堂上所介绍的变量、条件语句、循…

Jmeter配置脚本录制进行抓包并快速分析、定位接口问题

对于测试人员、开发人员来说,善用抓包工具确实是快速分析和定位问题的一大必备神技,现将配置过程记录如下: 1、打开jmeter后,首先添加—个线程组: 2、线程组可以重新命名按项目名称分类: 如果你想学习自动化测试,我这边给你推荐一…

Leetcode经典题目之“双指针交换元素“类题目

1 LC 27. 移除元素 class Solution {public int removeElement(int[] nums, int val) {int nnums.length;int s0;for(int i0;i<n;i){// 只有不等于目标值的时候才会进行交换&#xff0c;然后移动s指针if(nums[i]!val){swap(nums,i,s);}}return s;}void swap(int[]nums, int…

22. 深度学习 - 自动求导

Hi&#xff0c;你好。我是茶桁。 咱们接着上节课内容继续讲&#xff0c;我们上节课已经了解了拓朴排序的原理&#xff0c;并且简单的模拟实现了。我们这节课就来开始将其中的内容变成具体的计算过程。 linear, sigmoid和loss这三个函数的值具体该如何计算呢&#xff1f; 我们…

『力扣刷题本』:环形链表(判断链表是否有环)

一、题目 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&am…

苹果iOS系统开发APP应用启动几种速度优化技巧与实践

在移动应用开发过程中&#xff0c;启动速度是影响用户体验的关键因素之一。一个应用如果启动迅速&#xff0c;会给用户留下良好的第一印象&#xff0c;相反&#xff0c;如果启动缓慢&#xff0c;用户的耐心和满意度可能会大打折扣。对于iOS开发者而言&#xff0c;优化启动速度不…

uart_printf自定义串口printf输出

暂时只格式化了%s和%c&#xff0c;需要其他格式化的可自行添加&#xff0c;后续也可能更新 标准库 #include <stdarg.h> //需要包含的头文件--->任意参数功能需要void UART_printf(USART_TypeDef *USARTx, const char *fmt, ...) {va_list args;va_start(args, fmt)…

安装第三方包报错 error: Microsoft Visual C++ 14.0 or greater is required——解决办法

1、问题描述 手动安装第三方软件时&#xff0c;可以使用setup.py&#xff0c;来安装已经下载的第三方包。一般文件下会存在setup&#xff0c;在所要安装库的目录下的cmd执行&#xff1a;python setup.py install报错&#xff1a;error: Microsoft Visual C 14.0 or greater i…

详解ssh远程登录服务

华子目录 简介概念功能 分类文字接口图形接口 文字接口ssh连接服务器浅浅介绍一下加密技术凯撒加密加密分类对称加密非对称加密非对称加密方法&#xff08;也叫公钥加密&#xff09; ssh两大类认证方式&#xff1a;连接加密技术简介密钥解析 ssh工作过程版本协商阶段密钥和算法…

程序员如何做事更细致?

最近在工作中老是犯一些小错误&#xff0c;哦&#xff0c;当然也不是最近了&#xff0c;其实我一直是个马虎的人&#xff0c;我很讨厌做一些细活&#xff0c;因为这会让我反复改动多次在会成功&#xff0c;而平时的代码由于有debug&#xff0c;即便出错了&#xff0c;再改回来即…

高效背单词——单词APP安利

大英赛&#xff0c;CET四六级&#xff0c;以及考研英语&#xff0c;都在不远的未来再度来临&#xff0c;年复一年的考试不曾停息&#xff0c;想要取得好成绩&#xff0c;需要我们的重视并赋予相应的努力。对于应试英语&#xff0c;词汇量是不可忽略的硬性要求。相比于传统默写&…

SOME/IP 协议介绍(六)接口设计的兼容性规则

接口设计的兼容性规则&#xff08;信息性&#xff09; 对于所有序列化格式而言&#xff0c;向较新的服务接口的迁移有一定的限制。使用一组兼容性规则&#xff0c;SOME / IP允许服务接口的演进。可以以非破坏性的方式进行以下添加和增强&#xff1a; • 向服务中添加新方法 …

Node.js环境配置级安装vue-cli脚手架

一、下载安装Node.js (略) 二、验证node.js并配置 1、下载安装后&#xff0c;cmd面板输入node -v查询版本、npm -v ,查看npm是否安装成功&#xff08;有版本号就行了&#xff09; 2、选择npm镜像&#xff08;npm config set registry https://registry.npm.taobao.org&…

笔记55:长短期记忆网络 LSTM

本地笔记地址&#xff1a;D:\work_file\DeepLearning_Learning\03_个人笔记\3.循环神经网络\第9章&#xff1a;动手学深度学习~现代循环神经网络 a a a a a a a a a

如何解决msvcr100.dll丢失问题?5个实用的解决方法分享

在日常计算机操作过程中&#xff0c;相信不少小伙伴都经历过这样一种困扰&#xff0c;那便是某款应用程序或者游戏无法正常启动并弹出“找不到msvcr100.dll”的提示信息。这类问题让人头疼不已&#xff0c;严重影响到了我们的工作效率和休闲娱乐。接下来&#xff0c;就让小编带…

Amazon EC2的出现,是时代的选择了它,还是它选择了时代

目录 Amazon EC2简介 友商云服务器对比&#xff08;Amazon VS Tencent&#xff09; 友商云服务器对比&#xff08;Amazon VS Alibaba&#xff09; Amazon 云服务器的绝对优势 Amazon EC2功能 Amazon EC2 Linux 实例入门 启动实例 连接到的实例 清除的实例 终止的实例…

2 Redis的高级数据结构

1、Bitmaps 首先&#xff0c;最经典的应用场景就是用户日活的统计&#xff0c;比如说签到等。 字段串&#xff1a;“dbydc”&#xff0c;根据对应的ASCII表&#xff0c;最后可以得到对应的二进制&#xff0c;如图所示 一个字符占8位&#xff08;bit&#xff09;&#xff0c;…