• 最大利润


    题目描述

     X市的一家化工厂最近购买了一批重量为n克的化学原料。这种原料可以进行A,B两种化学实验,每种实验有其固定的利润及损耗率。已知,1克的原料做 A实验可得利润a元,但有p的损耗; 同样,1 克的原料做B实验可得利润b元,但有q的损耗。
      一次全体实验定义为:将手头现有的全部原料一部分做A实验,另一部分做B实验。其利润为做A 实验的总利润与做B实验的总利润之和。
      于是一个问题摆在面前,若化工厂准备做m次全体实验,那么如何安排每次实验,才能使得总利润最大呢?请你编程解决这个问题。

    输入格式

    输入文件仅1行,依次为: m, n,a,b,p,q
    其中n,m,a,b为整数,且0<m<=30, 0<n<10000, 0<a,b<=1000,0<p<1, 0<q<1。

    输出格式

    输出文件仅一行,为最大利润,并保留五位小数。

    太牛x了!

    最优,最大,最好,最少等问题基本算法为动态规划。

    该题数学味很浓,要解题必须用数学方法去分析解法。

    设 f[m] 为第m 次试验所取得的最大利润,c[m] 为第m 次试验所取得的最大利润的 每克原料的利润率。

    令 q=1-q,p=1-p;分别表示原料的剩余率。

    <1>f[m][n]=c[m]*n;  c[m]=max(a,b);

    <2>f[m-1][n]=a*x+b*(n-x)+f[m][p*x+q*(n-x)];

         整理的       =x*[ a-b+c[m]*p-c[m]*q ] +b*n+c[m]*n*q;

                       为了使f[m-1][n]的值最大,x 为0或n;

                      所以f[m-1][n]=max{    (b+c[m]*q)*n , (a+c[m]*p)*n     }

                       所以 可推出 c[m-1]=max{b+c[m]*q , a+c[m]*p};

          。。。。。

        可推出c[1],

      则 f[1][n]=c[1]*n.

     1 #include<iostream>
     2 #include<stdlib.h>
     3 using namespace std;
     4 
     5 int m,n,a,b;
     6 double p,q,c;
     7 
     8 int main()
     9 {
    10     cin>>m>>n>>a>>b>>p>>q;
    11     p=1-p;q=1-q;
    12     
    13     c=max(a,b);
    14     while(m>1)
    15     {c=max(a+c*p,b+c*q);m--;}
    16     
    17     double ans;
    18     ans=c*n;
    19     
    20     printf("%.5lf\n",ans);
    21     
    22     return 0;
    23     
    24     }
  • 相关阅读:
    Mysql存储类型选择
    Mysql的MVCC
    SQL标准中的四种隔离级别
    web权限管理总结
    关于oauth2中为什么不直接返回token而是传授权码code
    课程作业——爬取校园新闻首页的新闻的详情,使用正则表达式,函数抽离
    网络爬虫基础练习
    Python中文词频统计
    关于Maven的配置与学习
    课程作业——综合练习:英文词频统计
  • 原文地址:https://www.cnblogs.com/noip/p/2648287.html
Copyright © 2020-2023  润新知