Deməli, Siz $2^n$-er olmaq istəyirsiniz?#1577

Deməli, Siz $2^n$-er olmaq istəyirsiniz? (Həll təhlili)

f(n, a) ilə oyunçunun suala cavab verməli olduğu və ilkin məbləğin -ya bərabər olduğu halda gözlənilən uduşun maksimum mümkün dəyərini işarə edək.

Əgər n = 0 olarsa, oyunçu ilkin məbləğ ilə qalır, yəni f(0, a) = a.

Düzgün cavab vermə ehtimalı -yə bərabərdir, burada t \le p \le 1. Əgər oyunçu birinci suala düzgün cavab verirsə, ona n - 1 sual qalır, mükafat məbləği isə ikiqat artaraq -ya bərabər olur. 1 - p ehtimalı ilə səhv cavab verilir və bütün məbləğ itir. Deməli, birinci sualdan sonra gözlənilən uduş bərabərdir

p \cdot f(n - 1, 2a) + (1 - p) \cdot 0 = p \cdot f(n - 1, 2a)

Əgər bu dəyər cari məbləğ -dan böyükdürsə, oyuna davam etmək sərfəlidir; əks halda — dayanmaq lazımdır. Beləliklə, davam etmə qərarından sonra gözlənilən uduş bərabərdir

max(a, p \cdot f(n - 1, 2a))

ehtimalı parçası üzərində bərabər paylandığı üçün

f(n, a) = \frac{1}{1 - t} \int_{t}^{1} max(a, p \cdot f(n - 1, 2a))\,dp

Əgər t = 1 olarsa, düzgün cavab vermə ehtimalı vahidə bərabərdir, deməli oyunçu bütün suala cavab verməlidir və nəticədə 2^n uduş əldə edir.

Nümunə

Üçüncü testə baxaq, burada n = 2, t = 0.6. İlkin kapital a = 1.

f(2, 1) = \frac{1}{0.4} \int_{0.6}^{1} max(1, p \cdot f(1, 2))~dp, \\ f(1, 2) = \frac{1}{0.4} \int_{0.6}^{1} max(2, p \cdot f(0, 4))~dp, \\ f(0, 4) = 4

f(1, 2) dəyərini f(0, 4) vasitəsilə hesablayaq:

f(1, 2) = \frac{1}{0.4} \int_{0.6}^{1} max(2, p \cdot f(0, 4))~dp = 2.5 \cdot \int_{0.6}^{1} max(2, 4p)~dp = \\ / nəzərə alırıq ki,~4p > 2~olduğu halda~0.6 \le p \le 1 / \\ 2.5 \cdot \int_{0.6}^{1} 4p~dp = 2.5 \cdot \left[ 2 p^2 \right]_{0.6}^{1} = \\ 5 \cdot (1 - 0.36) = 5 \cdot 0.64 = 3.2

f(2, 1) dəyərini f(1, 2) vasitəsilə hesablayaq:

f(2, 1) = \frac{1}{0.4} \int_{0.6}^{1} max(1, p \cdot f(1, 2))~dp = 2.5 \cdot \int_{0.6}^{1} max(1, 3.2p)~dp = \\ / nəzərə alırıq ki,~3.2p > 1~olduğu halda~0.6 \le p \le 1 / \\ 2.5 \cdot \int_{0.6}^{1} 3.2p~dp = 2.5 \cdot \left[ 1.6 p^2 \right]_{0.6}^{1} = \\ 4 \cdot (1 - 0.36) = 4 \cdot 0.64 = 2.56

Alqoritmin realizasiyası

integral funksiyası

I(a, k) = \frac{1}{1 - t} \int_{t}^{1} max(a, kp)\,dp

inteqralının dəyərini verilmiş və həqiqi ədədləri üçün hesablayır. t = 1 olduqda təxmin etmə ehtimalı vahidə bərabərdir, buna görə I(a, k) inteqralının dəyəri max(a, k)-ya bərabər qəbul edilir.

Aşağıda sahəsi \int_{t}^{1} max(a, kp)\,dp inteqralının dəyərinə bərabər olan sahə göstərilib:

y = a və y = kp düz xətlərinin kəsişmə nöqtəsini tapaq:

a = kp,~buradan~p = a/k

temp = a / k qəbul edək. \int_{t}^{1} max(a, kp)\,dp inteqralının dəyərinə \int_{t}^{temp} a\,dp + \int_{temp}^{1} kp\,dp cəmi kimi baxaq. nöqtəsinin və nöqtələrinə nisbətən vəziyyətindən asılı olaraq I(a, k) inteqralının dəyərini hesablayırıq.

a \cdot (temp - t) + k \cdot (1 - temp \cdot temp) / 2
double integral(double a, double k)
{
  double s = 0, temp = a / k;
  if (t == 1) return max(a,k);
  if (temp > 1) return a * (1 - t);
  if (temp >= t) s = a * (temp - t);
  else temp = t;
  s += k * (1 – temp * temp) / 2;
  return s / (1 - t);
}

f funksiyası f(n, a) = \begin{cases} I(a, f(n - 1, 2a)), n > 0 \\ a, n = 0 \end{cases} dəyərini rekursiv olaraq hesablayır.

double f(int n, int a)
{
  if (!n) return a;
  double k = f(n - 1,2 * a);
  return integral(a,k);
}

Proqramın əsas dövrü. Giriş məlumatlarını oxuyuruq və f(n, 1) dəyərini çap edirik.

while(scanf("%d %lf",&n,&t),n + t)
  printf("%.3lf\n",f(n,1));