[渴婴问题] 有一个非常渴的、聪明的小婴儿,她可能得到的东西包括一杯水、一桶牛奶、多罐不同种类的果汁、许多不同的装在瓶子或罐子中的苏打水,即婴儿可得到n种不同的饮料。根据以前关于这n种饮料的不同体验,此婴儿知道这其中某些饮料更合自己的胃口,因此,婴儿采取如下方法为每一种饮料赋予一个满意度值:饮用1盎司第i 种饮料,对它作出相对评价,将一个数值si 作为满意度赋予第i 种饮料。
通常,这个婴儿都会尽量饮用具有最大满意度值的饮料来最大限度地满足她解渴的需要,但是不幸的是:具有最大满意度值的饮料有时并没有足够的量来满足此婴儿解渴的需要。设ai是第i 种饮料的总量(以盎司为单位),而此婴儿需要t盎司的饮料来解渴,那么,需要饮用n种不同的饮料各多少量才能满足婴儿解渴的需求呢?
#include <iostream>
using namespace std;
typedef struct tagBeverage
{
char beveName[20]; //饮料名称
int beveMeasure; //饮料的数量
int beveSactisfaction; //婴儿对该饮料的满意度
}BEVERAGE, *PBEVERAGE;
//婴儿所需饮料总数
int baby_require = 100;
//初始化饮料数组
BEVERAGE beveArray[3] = {{"water", 10, 60}, {"coco", 40, 40}, {"pasi", 80, 80}};
//寻找满意度最高的饮料ID
int findHighestSactisfy(BEVERAGE beveArray[], int n, int highestBeve=0, int highestBeveSatisfy=0)
{
for(int i=0; i<n; i++)
{
if((beveArray[i].beveSactisfaction > highestBeveSatisfy) && (beveArray[i].beveMeasure > 0))
{
highestBeve = i;
highestBeveSatisfy = beveArray[i].beveSactisfaction;
}
}
return highestBeve;
}
//算法函数
void satisfyThirsty(BEVERAGE beveArray[], int n)
{
int i, highestBeve=0, highestSatisfy=0;
do
{
i = findHighestSactisfy(beveArray, 3);
if((baby_require -= beveArray[i].beveMeasure) > 0)
{
cout<<"Baby enjoyed "<<beveArray[i].beveName<<" "
<<beveArray[i].beveMeasure<<"Ansi"<<endl;
cout<<"Beverage sactisfaction is "<<beveArray[i].beveSactisfaction<<endl;
beveArray[i].beveMeasure = 0;
}
else
{
beveArray[i].beveMeasure -= baby_require;
baby_require = 0;
cout<<"Baby enjoyed "<<beveArray[i].beveName<<" "
<<baby_require<<"Ansi"<<endl;
cout<<"Beverage sactisfaction is "<<beveArray[i].beveSactisfaction<<endl;
}
cout<<"Beverage "<<beveArray[i].beveName<<" left "<<beveArray[i].beveMeasure<<"Ansi"<<endl;
}while(baby_require);
}
int main()
{
satisfyThirsty(beveArray, 3);
system("pause");
return 0;
}
分享到:
相关推荐
渴婴问题 这是一个典型的最优化问题示例。婴儿需要从多种不同饮料中选择组合来最大化满足度值,同时保证总的饮料量恰好为所需量。该问题的数学模型可以表示为: - **目标**: 最大化 \(\sum_{i=1}^{n}s_i x_i\) - ...
- **渴婴问题**:此问题探讨了如何在有限的饮料种类和数量中,选择组合以满足婴儿的解渴需求,同时最大化满意度。通过贪婪策略,我们可以按饮料的满意度值排序,优先选择满意度最高的饮料直至满足解渴需求或饮料耗尽...
例如,在**渴婴问题**中,婴儿需要在各种饮料中选择,以最大化满意度总和,同时确保总量满足需求。这是一个典型的线性规划问题,目标函数是满意度的总和,约束条件是饮料的总量和婴儿的需水量。 **装载问题**是另一...
#### 例1-1 渴婴问题 在这个问题中,我们考虑如何为一个口渴的婴儿分配不同的饮料以最大程度地满足她的需求。这里有几种不同的饮料,每种饮料都有一个满意度值\(s_i\),以及一个总量\(a_i\)。婴儿需要\(t\)盎司的...
**例1-1:渴婴问题** 这是一个简单的最优化问题实例。假设婴儿需要通过喝水、牛奶或其他饮料来解渴,每种饮料都有一定的满意度值(sᵢ),同时每种饮料的总容量(aᵢ)也已知。婴儿需要解渴的量为t盎司,目标是找到...
例如,"渴婴问题"是一个典型的最优化问题,婴儿需要在有限的饮料量中选择满意度最高的组合来最大化满足感。限制条件是总饮料量需等于婴儿需要的量,而优化函数是满意度的总和。 贪婪算法的思想是,在每一步决策时都...