何が間違っているのか、ご教授願います。
#include <cstdio>
#include <algorithm>
constexpr int MAX_X = 4, MAX_YN = 50, MAX_Z = 49;
int main(){
while(true){
int X, Y, Z;
int roulette[MAX_X], jump[MAX_YN]{}, get_money[MAX_YN]{};
float dp[MAX_YN + 1][100 * MAX_Z + 1]{1};
scanf("%d%d%d", &X, &Y, &Z);
if(!X){
break;
}
for(int i = 0; i < X; ++i){
scanf("%d", &roulette[i]);
}
for(int i = 0; i < Z; ++i){
int n, e, a;
scanf("%d%d%d", &n, &e, &a);
switch(e){
case 1:
jump[n] = a;
break;
case 2:
get_money[n] = a;
break;
case 3:
get_money[n] = -a;
break;
}
}
for(int i = 0; i < Y; ++i){
for(int j = 0; j <= i * 100; ++j){
if(dp[i][j] == 0){
continue;
}
if(jump[i] > 0){
dp[std::min(i + jump[i], Y)][j] += dp[i][j];
continue;
}
for(int k = 0; k < X; ++k){
dp[std::min(i + roulette[k], Y)][std::max(j + get_money[i + roulette[k]], 0)] += dp[i][j] / X;
}
}
}
float ans = 0;
for(int i = 0; i <= 100 * Y; ++i){
ans += dp[Y][i] * i;
}
printf("%d\n", (int)ans);
}
return 0;
}