LightOJ 1248 Dice (III)

传送门

题意#

有一个 n 面的骰子,每次投掷每个面都是等概率出现,求所有面都出现的期望投掷次数。

思路#

我们进行一个状态定义:f[i] 表示已经出现了 i 个不同的面的期望,那么我们考虑 f[i] 可以由谁转移过来?
显然我们每次投掷最多只会出现一个面,这个面有两种情况,第一种为出现过的,第二种为没出现过的
那么 f[i]in 的概率由出现过的面转移而来, 有 nin 的概率从未出现的面转移过来,并且无论从哪里来,期望次数都会比原来多 1
f[i]=in×f[i]+nin×f[i1]+1 移项可得 f[i]=f[i1]+nni

点击查看代码
/********************
Author:  Nanfeng1997
Contest: LightOJ
URL:     https://lightoj.com/problem/dice-iii
When:    2022-03-22 14:46:47

Memory:  64MB
Time:    1000ms
********************/
#include  <bits/stdc++.h>
#define _ 0
using namespace std;
using LL = long long;
double dp[100010];
void solve(int T) {
  int n; cin >> n;
  dp[1] = 1; 
  for(int i = 2; i <= n; i ++ ) {
    dp[i] = dp[i - 1] + 1.0 * n / (i - 1);
  }
  printf("Case %d: %.10f\n", T, dp[n]);
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  int T = 1, r = 0; cin >> T;
  while(T --) solve(++ r);

  return ~~(0 ^ _ ^ 0);
}

posted @   ccz9729  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示
主题色彩