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

news2024/11/17 9:32:41

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])

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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

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

【C++】【Opencv】cv::Canny()边缘检测函数详解和示例

Canny边缘检测是一种流行的边缘检测算法,由John F. Canny在1986年开发。它是一种多阶段过程,包括噪声滤波、计算图像强度的梯度、非最大值抑制以及双阈值检测。本文通过函数原型解读和示例对cv::Canny()函数进行详解,以帮助大家理解和使用。 …

Blowfish在线加密解密调试校验工具

具体请前往:在线Blowfish加密解密工具

米家竞品分析

一、项目描述 1. 竞品分析描述 分析市场直接竞品和潜在竞品,优化产品核心结构和页面布局,确立产品核心功能定位。了解目标用户核心需求,挖掘用户魅力型需求,以及市场现状为产品迭代做准备。 2. 产品测试环境 二、市场 1. 行业…

Django 简单入门(一)

一、配置虚拟环境 1、安装虚拟环境库vitualenv 与vitualenvwrapper-win 2、创建虚拟环境 myenv 3、在此环境中安装django 二、创建一个Django项目 1、使用命令来创建:django-admin startproject Django2023 工程名为Django2023 2、 使用PyCharm专业版创建Django项…

【预处理详解】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 1. 预定义符号 2. #define定义常量 3. #define定义宏 4. 带有副作用的宏参数 5. 宏替换的规则 6. 宏函数的对比 7. #和## 7.1 #运算符 7.2 ## 运算符 8. 命名约定 …

基于STC12C5A60S2系列1T 8051单片的模数芯片ADC0809实现模数转换应用

基于STC12C5A60S2系列1T 8051单片的模数芯片ADC0809实现模数转换应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍模数芯片ADC0809介绍通过模数芯片ADC0809把电压模…

kubenetes-Service和EndpointSlice

一、Service 二、Endpoint Endpoint记录一个 Service 对应一组 Pod 的访问地址,一个 Service 只有一个 Endpoint资源。Endpoint资源会去监测Pod 集合,只要服务中的某个 Pod 发生变更,Endpoint 就会进行同步更新。 三、Service、Endpoint和 P…

青少年CTF-WEB-2048

题目环境: 针对这种游戏通关类题目,常见的有两种情况 一、有参数改参数的数值达到题目规定的分数即可拿到flag 二、没有参数那么flag就是被编码了,找编码即可 这道题并没有说题目通关即可获得flag,也并没有发现参数 所以这里猜测f…

域名的理解

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

1、cvpr2024

CVPR2024官网: Overleaf模板: 更改作者(去掉CVPR标识) % \usepackage{cvpr} % To produce the CAMERA-READY version \usepackage[review]{cvpr} % To produce the REVIEW version改成 \usepackage{cvpr} …

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

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

翻译软件Mate Translate mac中文版介绍说明

Mate Translate mac可以帮你翻译超过100种语言的单词和短语,使用文本到语音转换,并浏览历史上已经完成的翻译。你还可以使用Control S在弹出窗口中快速交换语言。 Mate Translate Mac版软件介绍 Mate Translate 可以在你的所有设备之间轻松同步&#x…

EDA实验-----4*4矩阵键盘与数码管显示测试

目录 一、实验目的 二、实验仪器设备 三、实验原理 四、实验要求 五、实验步骤 六、实验报告 七、实验过程 1.矩阵键盘按键原理 2.数码管原理 3.分频器代码 4.电路图连接 5.文件烧录 一、实验目的 了解数码管的工作原理;掌握4*4矩阵键盘和数码管显示的编…

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

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

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

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

大数据HCIE成神之路之数学(3)——概率论

概率论 1.1 概率论内容介绍1.1.1 概率论介绍1.1.2 实验介绍 1.2 概率论内容实现1.2.1 均值实现1.2.2 方差实现1.2.3 标准差实现1.2.4 协方差实现1.2.5 相关系数1.2.6 二项分布实现1.2.7 泊松分布实现1.2.8 正态分布1.2.9 指数分布1.2.10 中心极限定理的验证 1.1 概率论内容介绍…

视频合并:掌握视频嵌套合并技巧,剪辑高手的必备秘籍

在视频剪辑的过程中,掌握视频合并的技巧是每个剪辑高手必备的技能之一。通过合理的合并视频,可以增强视频的视觉效果,提高观看体验。 一、视频合并的准备工作 收集素材:在进行视频合并之前,首先需要收集足够的素材&a…

IIC 通信协议之stm32 驱动OLED

前言 使用stm32 驱动4 Pin 的OLED, 现在网上开源的资料多的是,但是为了锻炼自己使用第一手资料的能力,今天我还是从数据手册开始,从头造一波轮子,同时也是为了加深自己对 IIC 协议的理解 ,本系列内容我会从…

数据库课后习题加真题

文章目录 第二章第三章第四到六章某年真题 第二章 第三章 3.8 对于教学数据库的三个基本表: s( 学号 ‾ \underline{学号} 学号​,姓名,年龄, 性别) sc( 学号 , 课程号 ‾ \underline{学号, 课程号} 学号,课程号​, 成绩) c( 课程号 ‾ \un…