`
Riddick
  • 浏览: 640195 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

贪心算法应用之渴婴问题

阅读更多

 [渴婴问题] 有一个非常渴的、聪明的小婴儿,她可能得到的东西包括一杯水、一桶牛奶、多罐不同种类的果汁、许多不同的装在瓶子或罐子中的苏打水,即婴儿可得到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\) - ...

    计算机算法_贪婪算法.pdf

    - **渴婴问题**:此问题探讨了如何在有限的饮料种类和数量中,选择组合以满足婴儿的解渴需求,同时最大化满意度。通过贪婪策略,我们可以按饮料的满意度值排序,优先选择满意度最高的饮料直至满足解渴需求或饮料耗尽...

    算法设计与分析(还不错)

    贪心算法常用于解决背包问题、拓扑排序、二分覆盖、最短路径和最小代价生成树等问题。例如,在背包问题中,贪婪策略可能是优先选择价值密度最高的物品,但在某些情况下,这可能导致无法达到最大的总价值。同样,最短...

    算法设计与分析

    例如,在**渴婴问题**中,婴儿需要在各种饮料中选择,以最大化满意度总和,同时确保总量满足需求。这是一个典型的线性规划问题,目标函数是满意度的总和,约束条件是饮料的总量和婴儿的需水量。 **装载问题**是另一...

    算法设计与分析+非常有用的非常有用的非常有用的

    例如,在“渴婴问题”中,婴儿需要找到最能满足其口渴需求的饮料组合,这涉及在有限的饮料总量下最大化满意度。问题的输入包括饮料种类、总量、婴儿的需求量以及每种饮料的满意度,输出是每种饮料的饮用量。在这个...

    常用算法分析

    **例1-1:渴婴问题** 这是一个简单的最优化问题实例。假设婴儿需要通过喝水、牛奶或其他饮料来解渴,每种饮料都有一定的满意度值(sᵢ),同时每种饮料的总容量(aᵢ)也已知。婴儿需要解渴的量为t盎司,目标是找到...

    分治法详细解析 C语言

    - **例1-1:渴婴问题** 这个问题是典型的最优化问题。婴儿需要在多种饮料中选择,使得总满意度最大化。在这个问题中,每种饮料都有一个满意度值和总量,婴儿需要在总量内尽可能多地选择满意度高的饮料。这是一个...

    贪婪算法1.doc

    例如,"渴婴问题"是一个典型的最优化问题,婴儿需要在有限的饮料量中选择满意度最高的组合来最大化满足感。限制条件是总饮料量需等于婴儿需要的量,而优化函数是满意度的总和。 贪婪算法的思想是,在每一步决策时都...

Global site tag (gtag.js) - Google Analytics