RQNOJ103_最大利润
題目描述
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。
輸出格式
輸出文件僅一行,為最大利潤,并保留五位小數
樣例輸入
3 100 300 500 0.3 0.6
樣例輸出
79000.00000
//------------------------------------------------------------------------------------------
f[i,j]表示第i次試驗開始時,有j克原料的最大利潤.
c[i]表示第i次實驗的利潤率,c[i]=f[i,j]/j,即c[i]*j=f[i,j].
從后往前倒推,我們發現第M次實驗顯然是哪種實驗的利潤率大就做哪種實驗.
即c[m]=max(a,b).
令p=1-p,q=1-q,表示實驗完后剩余的原料.
假設第i-1次實驗用x克做A實驗,0<=x<=j.
f[i-1,j]=ax+b(j-x)+f[i,xp+(j-x)q]
???????? =ax+bj-bx+c[i]*[xp+(j-x)q]
???????? =[a-b+c[i]*(p-q)]x+(b+c[i]*q)j
這是關于x的一次函數.
顯然當x=0或j時取到最值.
當a-b+c[i]*(p-q)>0時,函數為增函數,x=j時取最值.
f[i-1,j]=c[i-1]*j=a*j+f[i,j*p]=a*j+c[i]*j*p
c[i-1]=c[i]*p+a;
當a-b+c[i]*(p-q)<=0時,同理可得c[i-1]=c[i]*q+b;
ans=c[1]*n;
code:
var f:array[0..31] of real;m,n,a,b,i:longint;p,q:real;beginreadln(m,n,a,b,p,q);if a>b then f[m]:=aelse f[m]:=b;p:=1-p; q:=1-q;for i:=m-1 downto 1 doif a-b+f[i+1]*(p-q)>0 then f[i]:=a+f[i+1]*pelse f[i]:=b+f[i+1]*q;writeln(f[1]*n:0:5); end.轉載于:https://www.cnblogs.com/exponent/archive/2011/08/08/2130592.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的RQNOJ103_最大利润的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: svn里ignore不需要提交的用户文档
- 下一篇: 如何使得WIN7下用VS2010做出的M