[SP1026] FAVDICE - Favorite Dice

SP1026 FAVDICE - Favorite Dice

一.前言

​ 沉浸在中考成绩的悲伤中……上连接

二.思路

​ 我就明说了吧,期望,期望!期望二字都给我A到脸上来了……但是期望怎么做呢?我也不会也?

好吧好吧,分析一下。

​ 首先思路1,假设当前已经扔出了i个不同的面,那么下一次扔出一个新的面的概率是\(\dfrac{n-i}{n}\),扔出一个新面的期望是\(\dfrac{n}{n-i}\),(概率乘期望等于1奥,这很重要,要区分开)故易得式子(期望分步互不冲突,加法原理) \(ans=\sum^n_{i=1} \dfrac{n}{n-i}\) ,然后i与n-i是等价的,转换一下得 \(ans=\sum^n_{i=1} \dfrac{n}{i}\)

​ 然后思路2,这个其实比较常规奥,用的是递推。\(f[i]\) 表示已经扔出i个不同的面,后为了扔出所有面,还需要扔的次数的期望。,显然答案是 \(f[0]\)\(f[n]=0\),然后分成两种情况,现在扔一次,得出的面不是一个新面,(概率为 \(\dfrac{i}{n}\)),这次其实相当于作废需要扔 \(f[i]\) 次才行,如果得出的面是一个新面,(概率为 \(\dfrac{n-i}{n}\)),则只需要还扔 \(f[i+1]\) 次就行。因为是有是否出新面的大前提,相互影响,乘法原理。本身是扔了一次的,三个部分结合一下。可以得出一个式子。

\[f[i]=\frac{i}{n}f[i]+\frac{n-i}{n}f[i+1]+1; \]

很显然,熟知递推的你可能会跟呆呆的我一样有大大的疑惑,明明左右都有 f[i] 这个怎么转移?答案是,这不是转移方程。,把转移二字去掉,这个方程是成立的,并且可以解出 f[i] 与 f[i+1] 的关系,那才是转移方程。,那么解它。

\[f[i]=\frac{i}{n}f[i]+\frac{n-i}{n}f[i+1]+1\\ \frac{n-i}{n}f[i]=\frac{n-i}{n}f[i+1]+1\\ \because\frac{n-i}{n}!=0\\ f[i]=f[i+1]+\frac{n}{n-i}\\ \therefore ans=\sum^n_{i=1} \dfrac{n}{i} \]

三.CODE

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<fstream>
using namespace std;
int n,t;
double ans;
int main(){
	cin>>t;
	while(t--){
		ans=0.0;
		cin>>n;
		for(int i=1;i<=n;++i)ans+=1.00*n/i;
		printf("%.2f\n",ans);
	}
	return 0;
}
posted @ 2020-07-24 16:27  clockwhite  阅读(139)  评论(0编辑  收藏  举报