饮料供货java_动态规划(3):饮料供货动态规划(3):饮料供货 | 学步园...
题目
题目来自《编程之美》:在微软亚洲研究院上班,大家早上来的第一件事是干啥呢?查看邮件?No,是去水房拿饮料:酸奶,豆浆,绿茶、王老吉、咖啡、可口可乐……(当然,还是有很多同事把拿饮料当做第二件事)。
管理水房的阿姨们每天都会准备很多的饮料给大家,为了提高服务质量,她们会统计大家对每种饮料的满意度。一段时间后,阿姨们已经有了大批的数据。某天早上,当实习生小飞第一个冲进水房并一次拿了五瓶酸奶、四瓶王老吉、三瓶鲜橙多时,阿姨们逮住了他,要他帮忙。
从阿姨们统计的数据中,小飞可以知道大家对每一种饮料的满意度。阿姨们还告诉小飞,STC(Smart Tea Corp.)负责给研究院供应饮料,每天总量为V。STC很神奇,他们提供的每种饮料之单个容量都是2的方幂,比如王老吉,都是23=8升的,可乐都是25=32升的。当然STC的存货也是有限的,这会是每种饮料购买量的上限。统计数据中用饮料名字、容量、数量、满意度描述每一种饮料。
分析:此处构造的最优子结构和实现的代码不同于《编程之美》,采用动态规划自底向上的方法解决该问题。
1、数学建模
假设STC供提供n中饮料(n=1,2,...n),对应饮料的参数如下
要求的问题描述如下:
饮料总量为
在这个前提下,求解使总满意度最大,即
对于最优化问题,可以考虑是否能用动态规划求解。同时,该问题很类似于01背包问题,即在总量一定的前提下,使总价值(此处为满意度)最大,所以可以借鉴01背包问题的思想来解决该问题。
2、动态规划求解
2.1描述最优子结构
用f(i)来表示选取饮料i时的最大满意度。假设f(i-1)是选取饮料i-1时的最大满意度,那么
f(i)=max{f(i-1)+k*H[i]} (v[i-1]*k<=v',v'为f(i-1)时的剩余重量)
其中k=0,1,...,c[i]。
可以证明f(i)为饮料i时的最大满意度,假设如果还有比f(i-1)还大的满意度,则可替换,但是这个假设与f(i-1)是选取饮料i-1时的最大满意度矛盾。
由此确定的最优子结构为
2.2递归定义最优解的值
当i=1时,f(1)=max{k*H[i]}
当i>1时,f(i)=max{f(i-1)+k*H[i]} (v[i-1]*k<=v',v'为f(i-1)时的剩余重量)
其中k=0,1,...,c[i]。
终止条件:f(0)=0(没有饮料时,满意度为0)
2.3按自底向上方式计算最优解的值
用数组f记录满意度,f[n]为最优满意度,初始值为f[0]=0。数组remainV记录当前剩余总重量,初始值为remainV[0]=V。数组resultK记录对应饮料选择的最终数目,用于构造最优解,初始值为resultK[0]=0。
伪代码如下
/*
n=1,2,...n 饮料名称
V饮料总量上限
*/
f(n,V,C,H){
//初始化
f[0]=0;//数组f记录满意度,f[n]为最优满意度
remainV[0]=V;//数组remainV记录当前剩余总重量
resultK[0]=0;//数组resultK记录对应饮料选择的最终数目,用于构造最优解
for(inti=1;i<=n;i++){//饮料名称
currentf=f[i-1];
for(intk=0;k<=c[i];k++){
//剩余重量判断
tempV=k*v[i];
if(tempV>current[i-1])
break;
tempf=f[i-1]+k*H[i];
if(temp>=currentf){
curretnf=temp;
resultK[i]=k;
}//end if
else
resultK[i]=result[i-1];
}//end for
//记录剩余重量
currentV[i]=current[i-1]-resultK[i]*v[i];
}//end for
//返回最优满意度
returnf[n];
}//end f
2.4由计算出的结果构造一个最优解
//根据resultK构造最优解
for(inti=1;i<=n;i++){
System.out.println("饮料"+i+选取的数目为"+resultK[i]);
}//end for
子问题个数为饮料种类数目n,每个子问题的选择数目为该种饮料的最大上限数目c[i],所以时间复杂度为O(n*max{c[i]}),算法中用3个长度为n+1的数组保存值,故空间复杂度为O(n)
饮料供货java_动态规划(3):饮料供货动态规划(3):饮料供货 | 学步园...相关推荐
- ifft变换用java_利用FFT 及 IFFT实现傅立叶正反变换 | 学步园
貌似是很久没有写日志了,前段时间一直很想写关于矩阵特征值在迭代 毕业设计貌似也跟仿真有关,所以重拾matlab来做一些小的仿真,先说说利用FFT 和 IFFT来实现傅立叶正反变换吧.看了很多资料,网上 ...
- 分支限界法 java_算法java实现–分支限界法–单源最短路径问题 | 学步园
单源最短路径问题的java实现(分支限界法) 具体问题描述以及C/C++实现参见网址 http://blog.csdn.net/liufeng_king/article/details/8900872 ...
- 动态规划走楼梯_动态规划问题为什么要画表格?
❝ 本文是我的 91 算法第一期的部分讲义内容.91 算法第一期已经接近尾声,二期的具体时间关注我的公众号即可,一旦开放,会第一时间在公众号<力扣加加>通知大家. ❞ 动态规划可以理解为是 ...
- 【算法】动态规划 ④ ( 动态规划分类 | 坐标型动态规划 | 前缀划分型动态规划 | 前缀匹配型动态规划 | 区间型动态规划 | 背包型动态规划 )
文章目录 一.动态规划场景 二.动态规划分类 1.坐标型动态规划 2.前缀划分型动态规划 3.前缀匹配型动态规划 4.区间型动态规划 5.背包型动态规划 一.动态规划场景 动态规划 动态规划使用场景 ...
- 动态规划生产存储matlab,动态规划方法的matlab实现及其应用
<动态规划方法的matlab实现及其应用>由会员分享,可在线阅读,更多相关<动态规划方法的matlab实现及其应用(6页珍藏版)>请在人人文库网上搜索. 1.动态规划方法的动态 ...
- 最长公共子序列算法 java_转【算法之动态规划(三)】动态规划算法之:最长公共子序列 最长公共子串(LCS)字符串相似度算法...
1.先科普下最长公共子序列 & 最长公共子串的区别: 找两个字符串的最长公共子串,这个子串要求在原字符串中是连续的.而最长公共子序列则并不要求连续. 2.最长公共子串 其实这是一个序贯决策问题 ...
- ccf压缩编码java_压缩编码(CCF)——动态规划
试题编号: 201612-4 试题名称: 压缩编码 时间限制: 3.0s 内存限制: 256.0MB 问题描述: 问题描述 给定一段文字,已知单词a1, a2, -, an出现 ...
- java动态规划货车运输_动态规划01背包问题_动态规划方法在配送线路优化中的应用研究...
[摘要] 应用图论的方法对配送线路进行优化的缺点是,当线路复杂时计算较为烦琐,而应用动态规划的方法能有效解决这个问题.本文从理论上应用动态规划的方法对共同配送线路进行优化,并应用此方法对实际问题进行计 ...
- 【动态规划】状态压缩动态规划
整理的算法模板合集: ACM模板 目录 一.集合类状态压缩动态规划 A. AcWing 91. 最短Hamilton路径 B.AcWing 524. 愤怒的小鸟 二.连通类(棋盘类)状态压缩动态规划 ...
最新文章
- php 多线程上传,PHP多线程(pthreads)参数传递学习笔记
- 通过这组数据分析发现房价波动背后的规律
- “后完美日记”时代,橘朵、花知晓、funnyelves们还有机会吗?
- 使用XML方式进行AOP编程(代码)
- C# 中科学计数法转成正常值
- 《数据库系统实训》实验报告——存储过程
- python爬虫运行不出结果_请问这个为什么就是爬不到,运行之后电脑卡的不行,求大佬指导...
- 如何在阿里云里申请并使用免费https证书SSL、nginx下配置https证书
- Alex 的 Hadoop 菜鸟教程: 第19课 华丽的控制台 HUE 安装以及使用教程
- 面试评估表和评估指标雷达图(附模板下载)
- 男生种草潮流社区edge(嘿市),会是男生的小红书吗?
- STM32+二维码扫描模块(QR_Scaner)实现门禁系统
- matlab 分数阶的预估校正算法及实现
- 平面设计入门新手需看技巧
- 1.8安装大华相机SDK及测试
- Ubuntu 安装 uWSGI
- C#-快递鸟电子面单打印API
- 学计算机要选什么科,计算机要学什么科目
- xshell卸载不干净导致无法安装
- 这帮死磕技术的理工男造了一支笔
热门文章
- error pulling image configuration: Get https://registry-1.docker.io/v2/library/redis/blobs/sha256:7e
- 设计模式 - 创建型模式_抽象工厂模式
- vue毕业设计nodejs古诗词鉴赏学习网站vscode
- 通过计算机随机产生一道四则运算题
- Java 计算工作日,休假,调休,调班等
- pandas库中unique函数方法
- linux shell 获取表,bash - 如何获取shell脚本中目录中的文件列表?
- 证明-快慢指针找链表环
- 智能交通数据集Rope3D(仅限科研使用)
- PHP网站开发中关于META标签的注意事项