CF-gym-102861-A (Probabilidad DP)

Título

Quiere comprar cartas N. Ahora hay una especie de paquete de cartas, que puede contener al menos cartas A y como máximo cartas B.
Pregunte cuántos paquetes de tarjetas espera vender y podrá obtener al menos N tarjetas.
1 <= N <= 1e6
0 <= A <= B <= 1e6
B> 0

análisis

No es correcto considerar la expectativa de que el paquete de cartas se publique como (A + B) / 2.

Desde otra perspectiva, suponga que el número de paquetes de cartas necesarios para extraer x cartas es dp [x]
dp [x] = (dp [x-A] + dp [x-A + 1] +… + dp [x-B]) / (B-A + 1) + 1
puede calcular directamente todas las expectativas

Pero cuando A = 0, ambos lados de la ecuación contienen dp [x], pero no afecta su corrección, simplemente resuelva la ecuación.

Código

#include<bits/stdc++.h>
using namespace std;

const int maxn = 1e6 + 5;

double dp[maxn], pre[maxn];

int main(){
    
    
	int n, l, r;
	cin >> n >> l >> r;

	dp[0] = 1; pre[0] = 1;
	if(l == 0){
    
    
		for(int i = 1 ; i <= n ; i++){
    
    
			dp[i] = (pre[max(0,i - l - 1)] - pre[max(0, i - r - 1)] + r - l + 1) / (r - l) ;
			pre[i] = pre[i - 1] + dp[i];
		}
	}
	else{
    
    
		for(int i = 1 ; i <= l ; i++)dp[i] = 1, pre[i] = pre[i - 1] + dp[i];
		for(int i = l + 1 ; i <= n ; i++){
    
    
			dp[i] = (pre[i - l] - pre[max(0, i - r - 1)]) / ( r - l + 1 ) + 1;
			pre[i] = pre[i - 1] + dp[i];
		}
	}
	printf("%.5f",dp[n]);
}

Supongo que te gusta

Origin blog.csdn.net/qq_35068676/article/details/110132906
Recomendado
Clasificación