请各位大侠出手!
假设人体需要:蛋白质  50g      脂肪    30g        淡水化合物    60g  
选择的食物有:牛奶(含    蛋白质    2g/每100克      碳水化合物      3g/每100克)  
              肉  (含    蛋白质    2g/每100克      碳水化合物      3g/每100克      脂肪    5g/每100克)  
              水果(含    蛋白质    4g/每100克      碳水化合物      6/每100克        脂肪    2g/每100克)  
问:需要分别吃多少牛奶+肉+水果(牛奶、肉、水果都要吃),可以满足人体需要

解决方案 »

  1.   

    谢谢大侠们的关注题目改为:假设人体需要:蛋白质  50g      脂肪    30g        淡水化合物    60g  
    选择的食物有:牛奶(含    蛋白质    2g/每100克      碳水化合物      3g/每100克)  
                  肉  (含    蛋白质    2g/每100克      碳水化合物      3g/每100克      脂肪    5g/每100克)  
                  水果(含    蛋白质    4g/每100克      碳水化合物      6/每100克        脂肪    2g/每100克)牛奶价格1.5元/100g,肉价格2元/100g,水果1.8元/100g  
    问:需要分别吃多少牛奶+肉+水果(牛奶、肉、水果都要吃),可以满足人体需要,且花的生活费最省。
      

  2.   

    设牛奶为X1,肉为X2,水果为X3
    Min F(X) = 1.5X1 + 2X2 + 1.8X3
    2X1 + 2X2 + 4X3 ≥ 50
    3X1 + 3X2 + 6X3 ≥ 60
    5X2 + 2X3 ≥ 60
    X1 ≥ 0
    X2 ≥ 0
    X3 ≥ 0
      

  3.   

    上面的作废,没有找到修改的帖子的地方
    设牛奶为X1,肉为X2,水果为X3  
    Min  F(X)  =  1.5X1  +  2X2  +  1.8X3  
    2X1  +  2X2  +  4X3  ≥  50  
    3X1  +  3X2  +  6X3  ≥  60  
    5X2  +  2X3  ≥  30  
    X1  ≥  0  
    X2  ≥  0  
    X3  ≥  0
      

  4.   

    To: wudi_1982(︻┳═一编码是一种享受)
    是的,这个满足是最低需求。请教您的算法。
      

  5.   

    做了一下,不知道对不对:procedure TForm1.Button1Click(Sender: TObject);
    const Nxi = 50; // 需要的蛋白质, 脂肪, 淡水化合物
          Nxj = 30;
          Nxk = 60;
    var  i, j, k : integer;  //蛋白质, 脂肪, 淡水化合物
         x1, x2, x3 : integer;  // 牛奶,肉,水果
         minx1, minx2, minx3: integer; //最少的牛奶,肉,水果
         v, min : real;// 价钱、最低价钱
    begin
      min :=1000.0; //初始化,设大一点值,确保第一次V能赋值给min
      minx1 := 0;
      minx2 := 0;
      minx3 := 0;
      for x1 := 0 to 25 do
        for x2 := 0 to 25 do
          for x3 := 0 to 15 do
            begin
              i := x1 * 2 + x2 * 2 + x3 * 4;  //求出蛋白质
              j := x2 * 5 + x3 * 2;           //求出脂肪
              k := x1 * 3 + x2 * 3 + x3 * 6;  //求出淡水化合物
              if (i >= Nxi) and (j >= Nxj) and (k >= Nxk) then  //达到需要的营养
                begin
                  v := 1.5 * X1  +  2 * X2  +  1.8 * X3; //求价钱
                  if v<min then  //找到低于最低价钱的价钱
                    begin
                      min := v;  //保存最小值
                      minx1 := x1;
                      minx2 := x2;
                      minx3 := x3;
                    end;
                end;
            end;
      ShowMessage(Format('牛奶%d  肉%d  水果%d  价钱%f',[minx1, minx2, minx3, min]));
    end;
      

  6.   

    T0: zhuminghua() 
    谢谢您给的提示,看了您程序,您用的是穷举法,可以解决目前的问题,而且速度也很快,但是,如果有更复杂的情况,比如营养素超过20种,食物超过10种甚至更多,这个算法的效率可能就要打问号了?请教您,也请教其他的高手大侠更高的算法。不知哪位大侠有心得于对偶单纯性算法,请您出手相助!
      

  7.   

    《运筹学算法与编程实践—Delphi实现》配书光盘源码
    http://www.2ccc.com/article.asp?articleid=2365运筹学的不好
      

  8.   

    To:vividw(vividw) 
    请问用什么样的方法更好一点呢?
      

  9.   

    To:vividw(vividw) 
    那个代码我下载了,用它得到的结果:x1 = 0 , x2 = 1.25 , x3 = 11.875,我的要求是x1, x2, x3 > 0,这个方法不太好
      

  10.   

    TO:vividw(vividw)
    我认真地看了一下自己用的那个对偶单纯型算法,从对偶化后就看不懂了,不知道从哪里下手调整,请赐教
      

  11.   

     蛋白质50g  淡水化合物60g  脂肪30g
    牛奶(含 蛋白质2g   碳水化合物3g)  
    肉  (含 蛋白质2g   碳水化合物3g 脂肪 5g)  
    水果(含 蛋白质4g   碳水化合物6g 脂肪 2g)牛奶价格1.5元/100g,肉价格2元/100g,水果1.8元/100g  
                 蛋白质  淡水化合物  脂肪
    牛奶的价格比:1.5/2,  3/2,        无
    肉  的价格比:2/2,    3/2,        5/2
    水果的价格比:4/1.8,  6/1.8,      2/1.8人体最大需求是淡水化合物,淡水化合物价格比最小的是水果
    所以一次把淡水化合物买够,60,买10,淡水化合物OK
    人体能量有40蛋白质,60淡水化合物,20脂肪
              差10,                ,差10
    脂肪只能在肉中含有,所有只能买肉2个,脂肪OK
    人体能量有44蛋白质,60淡水化合物,30脂肪
    最后发现蛋白质还是不够,差6,价格币种,最小的是水果,所以买水果2个
    最后注意,牛奶比水果便宜,我们差6个蛋白质,1个水果为4,1个为2
    所以,买一个水果,一个牛奶
    得出:牛奶1,肉2,水果11口算都能算出结果,不过要求不断的考虑临界点(二个价格比高的(买多了,浪费),
    但买一个便宜的(价格比不高)和一个价格比好的也能满足要求)
    这种方式可以考虑一下,实现很简单,我就不写代码了
      

  12.   

    TO: cdsgajxlp(起名很难)
    看过你的分析,发现我提出的问题有漏洞,没有考虑到人体所需蛋白质、脂肪、淡水化合物的摄入量有一定的范围,超过这个范围后就会带来不良的后果,暂定其范围为90%-110%之间,即蛋白质的有效范围为:50*0.9 = 45 到 50*0.11 = 55 之间,脂肪的有效范围为:27 到 33 之间,淡水化合物的有效范围为:54 到 66 之间;
    用你的办法得出的结果:蛋白质的总量为 50,脂肪的总量为:35,淡水化合物的总量为:75,满足了蛋白质的需求,但是脂肪和淡水化合物超出了有效范围,有可能给身体带来不良的后果。在此
    题目改为:假设人体需要:蛋白质  45g至55g      脂肪    27g至33g        淡水化合物    54g-66g  
    选择的食物有:牛奶(含    蛋白质    2g/每100克      碳水化合物      3g/每100克)  
                  肉  (含    蛋白质    2g/每100克      碳水化合物      3g/每100克      脂肪    5g/每100克)  
                  水果(含    蛋白质    4g/每100克      碳水化合物      6/每100克        脂肪    2g/每100克)牛奶价格1.5元/100g,肉价格2元/100g,水果1.8元/100g  
    问:需要分别吃多少牛奶+肉+水果(牛奶、肉、水果都要吃),可以满足人体需要,且花的生活费最省。
      

  13.   

    此题无解
    牛奶(含 蛋白质2g   碳水化合物3g)蛋白质:碳水化合物 =2:3
    肉  (含 蛋白质2g   碳水化合物3g 脂肪 5g)  蛋白质:碳水化合物 =2:3
    水果(含 蛋白质4g   碳水化合物6g 脂肪 2g)蛋白质:碳水化合物 =2:3蛋白质最小45;
    对应最小碳水化合物为 45*1.5 =67.5
    最小都操过了上限
    所以天下人不是被充死就是被饿死或者不是肥胖就是营养不良