В принципе, проблема имитирует следующее:
Есть урна с 50 зелеными шариками и 50 красными шариками.
Мне разрешается выбирать шары из урны без замены по следующим правилам: за каждый выбранный красный шар я теряю доллар, за каждый выбранный зеленый шар - доллар.
Я могу прекратить выбирать, когда захочу. В худшем случае я выбираю все 100, а чистый 0.
Вопрос заключается в том, чтобы придумать оптимальную стратегию остановки и создать программу для вычисления ожидаемого значения стратегии.
Моя стратегия состоит в том, чтобы продолжать выбирать шары, в то время как ожидаемое значение выбора другого шара является положительным.
То есть правило остановки ДИНАМИЧНОЕ.
В латексе вот рекурсивная формула на изображении:
http://i.stack.imgur.com/fnzYk.jpg
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
double ExpectedValue(double, double);
double max(double, double);
main() {
double g = 50;
double r = 50;
double EV = ExpectedValue(g, r);
printf ("%f\n\n", EV);
system("PAUSE");
}
double ExpectedValue(double g, double r){
double p = (g / (g + r));
double q = 1 - p;
if (g == 0)
return r;
if (r == 0)
return 0;
double E_gr = max ((p * ExpectedValue (g - 1, r)) + (q * ExpectedValue (g, r - 1)), (r - g));
return E_gr;
}
double max(double a, double b){
if (a > b)
return a;
else return b;
}
Я дал ему поработать 30 минут, и он все еще работал.
Для малых значений g и r решение вычисляется очень быстро. Что я делаю не так?
Любая помощь очень ценится!