1.6 饮料供货

问题:

总共n中饮料,每种饮料表示为(S[i],V[i],C[i],H[i],B[i]),S表示名称,V表示容量,C表示可以买的最大数量,H表示满意度,B表示实际购买量在V[i]*B[i]求和=V的情况下,H[i]*B[i]求和最大化

最优化,毫无疑问,考虑动态规划跟贪心。

状态转移方程:

设Opt(V’,i)表示从 i 到 n-1 种饮料中,Ci 为第i种饮料可能的最大数量,算出总量为V’的方案中满意度之和的最大值。

那么递归式就应该是:

Opt(V’,i)= max{ k * H+
Opt(V’-Vi * k,i+1)}(k=0,1,2…,Ci,i=0,1,2…,n-1)

这里我觉得需要说明给出的饮料组合最终可以组合出V。

递推:

int Cal(int V, int T) {
	opt[0][T] = 0;									//边界条件,T为所有饮料种类
	for(int i = 0; i <= V; ++i) opt[i][T] = -INF;	//边界条件
	for(int j = T-1; j >= 0; --j) {
		for(int i = 0; i <= V; ++i) {
			opt[i][j] = -INF;
			for(int k = 0; k <= C[j]; ++k) {        //遍历第j种饮料选取数量k
				if(i < k * V[j]) break;
				int x = opt[i - V[j] * k][j + 1];
				if(x != -INF) {
					x += k * H[j];
					if(x > opt[i][j]) opt[i][j] = x;
				}
			}
		}
	}
	return opt[V][0];
}

记忆化搜索:

int opt[V+1][T+1];    //初始化时opt中存储值为-1,表示该子问题尚未被求解

int Cal(int V, int type) {
	if(type == T) {
		if(V == 0) return 0;
		else return -INF;
	}
	if(V < 0) return -INF;
	if(V == 0) return 0;
	else if(opt[V][type] != -1) return opt[V][type];  //该子问题已求解,则直接返回子问题的解
	int ret = -INF;                                   //子问题尚未求解,则求解该子问题
	for(int i = 0; i <= C[type]; ++i) {
		int temp = Cal(V - i * V[type], type + 1);
		if(temp != -INF) {
			temp += i * H[type];
			if(temp > ret) ret = temp;
		}
	}
	return opt[V][type] = ret;
}
时间: 2024-11-08 16:36:35

1.6 饮料供货的相关文章

第1章 游戏之乐——饮料供货

饮料供货 1. 问题描述 在微软亚洲研究院上班,大家早上来的第一件事是干啥呢?查看邮件?No,是去水房拿饮料:酸奶,豆浆,绿茶.王老吉.咖啡.可口可乐……(当然,还是有很多同事把拿饮料当做第二件事). 管理水房的阿姨们每天都会准备很多的饮料给大家,为了提高服务质量,她们会统计大家对每种饮料的满意度.一段时间后,阿姨们已经有了大批的数据.某天早上,当实习生小飞第一个冲进水房并一次拿了五瓶酸奶.四瓶王老吉.三瓶鲜橙多时,阿姨们逮住了他,要他帮忙. 从阿姨们统计的数据中,小飞可以知道大家对每一种饮料的

编程之美之饮料供货

在微软亚洲研究院上班,大家早上来的第一件事是干啥呢?查看邮件?No,是去水房拿饮料:酸奶,豆浆,绿茶.王老吉.咖啡.可口可乐--(当然,还是有很多同事把拿饮料当做第二件事). 管理水房的阿姨们每天都会准备很多的饮料给大家,为了提高服务质量,她们会统计大家对每种饮料的满意度.一段时间后,阿姨们已经有了大批的数据.某天早上,当实习生小飞第一个冲进水房并一次拿了五瓶酸奶.四瓶王老吉.三瓶鲜橙多时,阿姨们逮住了他,要他帮忙. 从阿姨们统计的数据中,小飞可以知道大家对每一种饮料的满意度.阿姨们还告诉小飞,

饮料换购

乐羊羊饮料厂正在举办一次促销优惠活动.乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去,但不允许赊账. 请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的n瓶饮料,最后他一共能得到多少瓶饮料. 输入:一个整数n,表示开始购买的饮料数量(0<n<10000) 输出:一个整数,表示实际得到的饮料数 例如: 用户输入: 100 程序应该输出: 149 用户输入: 101 程序应该输出: 151 资源约定: 峰值内存消耗(含虚拟机) < 256M CPU

Oracle EBS-SQL (PO-17):检查供货比例不为100%.sql

select           * from           apps.MRP_SOURCING_RULES msrwhere           organization_id=X.    and msr.planning_active=2 /*and msr.planning_active=1*/ Oracle EBS-SQL (PO-17):检查供货比例不为100%.sql,布布扣,bubuko.com

3.5 供货比例(来源准则)控制

3.5.1   供货比例 可以通过ERP系统启用<供货比例(来源补充)规则>自动进行物料采购订单的供应商分配. 1)    在运行<MRP物料需求计划>之后,物料的独立需求计划数量,会根据供货比例按照供应商进行分配. 2)    对于总需求数量较小又不是整数的情况下,考虑到供应商供货的可行性,对于采购员无法完全根据分配比例的数量下达订单给供应商的,可以通过ERP系统采购订单的最小订单数量来处理. 2. 可以通过<供货比例>来保存各时期供货比例的历史,历史比例不能够修改,

(转)谁能想到,饮料正在“谋杀”我们的牙齿

作者:小贝链接:https://zhuanlan.zhihu.com/p/22270231来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 我发现,最近身边有个现象,就是越来越多朋友开始关注牙齿健康了,这是件好事.但蛋疼的是,其中有些人甚至开始出现了不同程度的被害妄想症. 他们觉得自己的牙齿在时刻受到伤害,哪一次吃的酸了.喝得甜了,牙齿就离掉落不远了.难以置信的是,有个我的酒鬼朋友为了牙齿竟然决定开始戒酒... 为了他们,印第安老学鸠再次上线. 饮料究竟会不会伤害我

小时候的零食与饮料

我1978年出生于城市普通工人家庭,从懵懂记事开始到小学结束,如同上世纪八十年代大多数家庭里孩子一样,平时是很少能吃到零食的,但脑海中几样食品估计这辈子也不会忘记. 那时母亲偶尔拿出三块多钱,指示我或姐姐去国营商店买饼干.当时的三块钱加上肉票好像能买四斤左右计划供应的肉,所以这种去买饼干的指示一来,姐弟俩都会异常高兴,抢着跑出巷子到街面上的杂货铺买东西.饼干种类并不多,但在改革开放的初期也实属不易.记得产自珠海特区的朱古力与葱油饼干最好吃,朱古力饼干属于夹心类型,当时拿到一两块后,舍不得吃那么快

啤酒和饮料

啤酒每罐2.3元,饮料每罐1.9元.小明买了若干啤酒和饮料,一共花了82.3元. 我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒. 注意:答案是一个整数.请通过浏览器提交答案. 不要书写任何多余的内容(例如:写了饮料的数量,添加说明文字等). 参考答案:11

简单工厂模式(详细)(举例饮料)

饮料案例: 饮料类(父类):     public class Drink    {        //虚方法        public virtual void Driking() {         }    } 可乐类(继承父类饮料类)     public class Cola:Drink    {        //重写父类的Driking()方法        public override void Driking()        {            Console.Wr