SSL 1635——系統可靠性

include_zzy發表於2017-03-09

Description

  一個系統由若干部件串聯而成,只要有一個部件故障,系統就不能正常執行,為提高系統的可靠性,每一部件都裝有備用件,一旦原部件故障,備用件就自動進入系統。顯然備用件越多,系統可靠性越高,但費用也越大,那麼在一定總費用限制下,系統的最高可靠性等於多少?
  給定一些系統備用件的單價Ck,以及當用Mk個此備用件時部件的正常工作概率Pk(Mk),總費用上限C。求系統可能的最高可靠性。

Input

第一行:n C
第二行:C1 P1(0) P1(1) … P1(X1) (0<=X1<=[C/Ck])

第n 行:Cn Pn(0) Pn(1) … Pn(Xn) (0<=Xn<=[C/Cn])

Output

最高可靠性

Sample Input

2 20
3 0.6 0.65 0.7 0.75 0.8 0.85 0.9
5 0.7 0.75 0.8 0.8 0.9 0.95
Sample Output

0.6375

//結果保留小數點後4位.
Hint

n<=10,C<=100,1<=Ci<=20


設f[i,j]為取到第i個系統備用件用了j元的最大系統可靠性。
f[i,j]:=max(f[i,j],f[i-1,j-k*a[i]]*p[i,k])
0<=i<=n
0<=j<=m
0<=k<=c div a[i]
f[0,0]:=1

程式碼如下:

var  n,c,i,j,k:longint;
     maxn:real;
     a:array[0..101]of longint;
     p,f:array[-1..101,-1..101]of real;

begin
  readln(n,c);
  a[0]:=1;
  for i:=1 to n do
    begin
      read(a[i]);
      for j:=0 to c div a[i] do read(p[i,j]);
      readln;
    end;
  f[0,0]:=1;
  for i:=0 to n do
    for j:=0 to c do
      for k:=0 to j div a[i] do
        if f[i,j]<f[i-1,j-k*a[i]]*p[i,k] then
          f[i,j]:=f[i-1,j-k*a[i]]*p[i,k];
  maxn:=0;
  for i:=1 to c do
    if f[n,i]>maxn then maxn:=f[n,i];
  write(maxn:0:4);
end.

相關文章