《蓝桥杯》30天拿下Python算法设计与分析【Day 13】

news/2024/10/30 21:31:18/

做你想做的,错的算我的

这里是Want595,欢迎光临我的世界 ~

系列文章目录

《蓝桥杯》30天拿下Python算法设计与分析  


目录

系列文章目录

前言

0-1背包问题

问题引入

程序设计

完全背包问题 

问题引入 

程序设计 

总结 


前言

本文介绍动态规划的一类典型题型:背包问题,具体分为0-1背包和完全背包两种。

0-1背包问题

每个物品有且仅有一个

问题引入

【问题描述】

给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问应如何选择装入背包的物品,使得装入背包中物品的总价值最大?

【输入形式】

第一行输入物品的个数n和背包容量C。

第二行输入每个物品的价值v[i].

第三行输入每个物品的重量w[i]

【输出形式】

第一行输出最大价值。

【样例输入】

4 7

9 10 7 4

3 5 2 1

【样例输出】

20

程序设计

def bag(n,C,vi,wi):
    results=[[0 for i in range(1+C)] for j in range(1+n)]
    for i in range(1,1+n):
        for j in range(1+C):
            if j<wi[i-1]:
                results[i][j]=results[i-1][j]
            else:
                results[i][j]=max(results[i-1][j],results[i-1][j-wi[i-1]]+vi[i-1])
    return results[-1][-1]
n,C=map(int,input().split())
vi=[int(i) for i in input().split()]
wi=[int(i) for i in input().split()]
res=bag(n,C,vi,wi)
print(res) 

算法分析

状态转移函数:results[i][j]=max(results[i-1][j],results[i-1][j-wi[i-1]]+vi[i-1]) 

完全背包问题 

每样物品有n个(可以理解为无穷个,随便取)

问题引入 

【问题描述】

对于吃货来说,过年最幸福的事就是吃了,没有之一!

但是对于女生来说,卡路里(热量)是天敌啊!

资深美女湫湫深谙“胖来如山倒,胖去如抽丝”的道理,所以她希望你能帮忙制定一个食谱,能使她吃得开心的同时,不会制造太多的天敌。

当然,为了方便你制作食谱,湫湫给了你每日食物清单,上面描述了当天她想吃的每种食物能带给她的幸福程度,以及会增加的卡路里量。

【输入形式】

输入包含多组测试用例。

每组数据以一个整数n开始,表示每天的食物清单有n种食物。

接下来n行,每行两个整数a和b,其中a表示这种食物可以带给湫湫的幸福值(数值越大,越幸福),b表示湫湫吃这种食物会吸收的卡路里量。

最后是一个整数m,表示湫湫一天吸收的卡路里不能超过m。

  [Technical Specification]    1. 1 <= n <= 100    2. 0 <= a,b <= 100000    3. 1 <= m <= 100000

【输出形式】

对每份清单,输出一个整数,即满足卡路里吸收量的同时,湫湫可获得的最大幸福值。

【样例输入】

3

3 3

7 7

9 9

10

5

1 1

5 3

10 3

6 8

7 5

6

【样例输出】

10

20

程序设计 

def maxHappiness(n,m,Happiness,Calorie):
    t_results=[0 for i in range(m+1)]
    for i in range(1,m+1):
        if i<Calorie[0]:
            t_results[i]=0
        else:
            while (t_results[i]+Happiness[0])<=i:
                t_results[i]+=Happiness[0]
    print(t_results)
    for i in range(1,n):
        results=[0 for i in range(m+1)]
        for j in range(1,m+1):
            if j<Calorie[i]:
                results[j]=t_results[j]
            else:
                results[j]=max(t_results[j],results[j-Calorie[i]]+Happiness[i])
        t_results=results
        print(results)
    return results[-1]
n=int(input())
Happiness=[]
Calorie=[]
for i in range(n):
    a,b=map(int,input().split())
    Happiness.append(a)
    Calorie.append(b)
m=int(input())
res=maxHappiness(n,m,Happiness,Calorie)
print(res) 

算法分析

状态转移函数: results[j]=max(t_results[j],results[j-Calorie[i]]+Happiness[i])

总结 

0-1背包与完全背包其实差异不大,主要是状态转移函数有个微小的差别,其他都基本不变。


http://www.ppmy.cn/news/21397.html

相关文章

VR视频加密SDK方案一机一码

VR视频比传统的平面视频给用户带来更好的体验&#xff0c;而且现在在教育、娱乐等领域VR类视频也越来越多。相比传统的视频制作&#xff0c;VR视频的成本要更高&#xff0c;所以重视VR视频的版权保护提升安全性&#xff0c;是很多VR内容制作商不得不考虑的问题。那么VR视频加密…

3D渲染优化入【Three.js】

Three.js 应用程序以每秒 60 帧 (FPS) 的速度执行 3D 渲染是流畅和愉快体验的保证。 然而&#xff0c;这是一个有时难以实现的目标&#xff01;本文整理了优化 Three.js 应用程序和达到 60 FPS 的最佳提示和技巧&#xff01; 推荐&#xff1a;使用 NSDT场景编辑器 快速搭建 3D…

SpringBoot(二):配置文件的作用、配置文件的格式、properties配置文件、yml配置文件

目录一、配置文件的作用二、配置文件的格式三、properties配置文件3.1 properties的基本语法3.2 properties的缺点3.3 配置自定义内容3.4 读取配置文件四、yml配置文件4.1 yml基本介绍4.2 yml基本语法4.3 使用yml配置不同的数据类型4.4 读取yml配置文件4.5 在yml中配置对象4.6 …

【Linux】git的使用

文章目录&#x1f3aa; Linux下git的使用&#x1f680;1.git三板斧⭐1.1 准备工作⭐1.2 git add⭐1.3 git commit⭐1.4 git push⭐1.5 筛选提交&#x1f680;2.git分区⭐2.1 工作区⭐2.2 暂存区⭐2.3 版本区&#x1f680;3.git分支管理⭐3.1 分支创建与切换⭐3.2 分支合并⭐3.3…

Dubbo SPI 源码分析

上一章&#xff0c;我简单演示了 Dubbo SPI 的使用方法。我们首先通过 ExtensionLoader 的 getExtensionLoader 方法获取一个 ExtensionLoader 实例&#xff0c;然后再通过 ExtensionLoader 的 getExtension 方法获取拓展类对象。这其中&#xff0c;getExtensionLoader 用于从缓…

【每日CSS3代码】

1-1 两栏布局【1/27】 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevi…

数学建模与数据分析 || 3. 面向数据的特征提取方法: 探索性数据分析

面向数据的特征提取方法: 探索性数据分析 文章目录面向数据的特征提取方法: 探索性数据分析1. 原始数据的准备1.1 导入 python 模块1.2 导入数据集并进行宏观认识1.3 数据集描述2. 数据的预处理2.1 缺失数据的甄别2.2 类别规模的评估3. 数据特征的处理3.1 第一个因变量- 分析范…

我们为什么要学习servlet? servlet是干嘛的?

最近刚刚学习完servlet&#xff0c;明白了一个事情&#xff0c;servlet是用来干嘛的&#xff0c;为什么要学习servlet&#xff0c;我想如果我在刚刚开始学习servlet时就明白这件事的话&#xff0c;会更加有利于我带有目的的去学习servlet&#xff1b;所以记录以下文章&#xff…