惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
宝玉的分享
宝玉的分享
月光博客
月光博客
小众软件
小众软件
Jina AI
Jina AI
WordPress大学
WordPress大学
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Tailwind CSS Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 【当耐特】
博客园 - 三生石上(FineUI控件)
博客园 - 司徒正美
大猫的无限游戏
大猫的无限游戏
The Cloudflare Blog
G
Google Developers Blog
M
MIT News - Artificial intelligence
N
Netflix TechBlog - Medium
云风的 BLOG
云风的 BLOG
MyScale Blog
MyScale Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
爱范儿
爱范儿
U
Unit 42
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Blog — PlanetScale
Blog — PlanetScale

静静的小窝

在VPS服务器上面安装OpenClaw并使用OpenRouter的免费API的一些“坑” | Some "pits" about installing OpenClaw and using OpenRouter's free API on a VPS server 五年了啊 | Five years 一个奇怪的估算 | A strange estimation 虚拟直播之路2 | Living as a V 2 虚拟直播之路 | Living as a V AI 写代码?| AI coding? X静评1.1:谷歌,快成了?| XComment1.1 Is Google's Success Coming? X静评0.3:要精致吗?| XComment0.3 Be Dainty? X静评0.2:座位是购买的服务还是赠送的服务?| Xcomment0.2 A Bought Seat or A Gift Seat X静评0.1:一纸限令,毁掉一个政策?| XComment0.1 One Paper, One Dead Policy? hadoop 3.2.2 Cluster Setup | hadoop 3.2.2 的集群启动 894A题解|894A Solution VY223 Journal Smith’s death 第一次翻墙|first cross wall [题解]异或三角形|2021蓝桥杯国赛|xor triangle 2021年蓝桥杯|LanQiaoCup2021 参赛|Attending Contest 新旧|New and Old 去毛泽东旧居| visit MAO ZEDONG old house 拜登会团结美国吗|Will Biden unite the USA? 出生|Birth 冒泡排序与排序的稳定性|Bubble Sort and Stability 看完哔哩哔哩上的NASA的火星车直播后的一些话|My words after watching NASA's launch of the Mars 2020 perseverance rover live on Bilibili 选择排序|Selection Sort 饭圈与特郎普|fandom and Trump 不盲目|No Blindness 从3到n——一道数学题|a math problem from 3 to N 公权与私权|public and private rights 我在第几层|Where I Am
背包问题|knapsack problem
静静 · 2020-09-07 · via 静静的小窝

视频版: https://www.bilibili.com/video/BV1pa4y1E7CC/

文字版:
在商店里面对着琳琅满目的商品,
再看看自己空瘪的钱包,
这么多自己想要的,
该怎么选择啊?
如何破除选择困难症?

大家好,
欢迎来到静谈算法,
我是静静。
不妨假设有5个想购买的物品,
分别是面包、快乐水、薯片、奶茶和月饼,有着不同的价格和满意值,
如何在10元的预算中获得最大的满意值呢?
为了方便考虑,我们假设最多购买一件
显然,这些东西被摆放在不同的货架上,不会被同时看见,选择是一步一步做的.
对于每一件商品,都有买或者不买2种可能的情况,
如果购买,那么满意值等于之前购买的商品的满意值加当前物品的满意值,
如果不买,那么满意值就是之前购买的商品的满意值。
同时,买与不买也影响着花费的钱。
不妨考虑一下这个例子。
对于第一个商品面包,花费7元及以上就可以购买,
同时获得9满意值(小于7元就算0满意值),
然后是快乐水,如果不买快乐水,那么满意值就等于上一行的值,
如果购买,满意值就是上一行的左侧2格的满意值加2,
以这一格为例,不购买就是花费7元买一个面包,满意值为9,
购买就是花费5元买面包(买不起为0满意),花2元买快乐水,
满意值为2。
比较9与2,取较大的值为9。
之后是薯片,同样的,比较花相同的钱的情况下,
买与不买薯片的2种情况中哪种满意值大。
接着是奶茶,最后是月饼。
这样的操作后,最右下角的就是可能的最大满意值。
为了便于书写,我们不妨用p[i]表示第i种物品的价格,
用v[i]表示第i种物品的满意值,
用dp[i][j]表示在第1i的物品中花费j元的最大可能满意值。
此时我们就可以写出公式为
买:dp[i][j]=v[i]+dp[i-1][j-p[i]]
即为花费p[i]元购买第i个商品的满意值与花费j-p[i]元在前i-1个商品中可能的最大满意值之和。
不买:dp[i][j]=dp[i-1][j]
即为花费j元在前i-1个商品中可能的最大满意值。
比较买与不买的2种情况,取较大值,即为第1
i的物品中花费j元的最大可能满意值。
不难发现,这种购买行为满足3个特点
1.最优子结构,即购买5件商品达到最大满意值时,
其中的任意件的购买总是也达到了最大值,可以独立求出。
2.无后效性,即前面购买不管怎样,
花费j元在前i个商品中的购买的最大满意值都不会变,
不会影响第i+1个商品的购买与否。
3.子问题有重叠性,即每一个物品的购买是独立的,不会干扰。
满足这三个特点的问题可以用动态规划(Dynamic Programming,DP)来解决
先找到问题的子问题的状态,再求出这些状态之间的转移方程,
再从最小的子问题开始着手解决问题。
在这里每种商品都只有买一件或不买2种状态,如果可以买任意件,又该如何呢?
想知道的话不要忘记点赞加关注,我是静静,我们下期再见。