NKOJ 营销策略【概率期望递推】

f [ i ] [ j ] f[i][j] f[i][j]表示已经买了 i i i份儿童套餐,已经得到了 j j j种不同的玩具的期望值,然后直接递推就好了:
o l d − > f [ i − 1 ] [ j ] ∗ j n old->f[i-1][j]*\frac{j}{n} old>f[i1][j]nj
n e w − > f [ i − 1 ] [ j − 1 ] ∗ ( 1 − j − 1 n ) new->f[i-1][j-1]*(1-\frac{j-1}{n}) new>f[i1][j1](1nj1)
f [ i ] [ j ] = o l d + n e w f[i][j]=old+new f[i][j]=old+new

#include 
#include 
#include 
#include 
#include 
#define db double 
#define ll long long
#define rep(i,x,y) for(ll i=(x);i<=(y);i++)
#define red(i,x,y) for(ll i=(x);i>=(y);i--)
using namespace std;

const ll N=1e3+5;

ll n,m;db f[N][N];

inline ll read() {
	ll x=0;char ch=getchar();bool f=0;
	while(ch>'9'||ch<'0'){if(ch=='-')f=1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
	return f?-x:x;
}

int main() {
	n=read(),m=read();
	
	f[0][0]=1.0;
	
	rep(i,1,m) rep(j,1,n) f[i][j]=f[i-1][j]*((db)j/n)+f[i-1][j-1]*((db)(n-(j-1))/n);
	
	printf("%.4lf",f[m][n]);

	return 0;
}

你可能感兴趣的:(NKOJ,数学-概率期望,动态规划与递推)