收集郵票C++題目【概率期望DP+數學推導】

題意

Description

n n n 種不同的郵票,皮皮想收集所有種類的郵票。唯一的收集方法是到同學凡凡那里購買,每次只能買一張,并且 買到的郵票究竟是 n n n 種郵票中的哪一種是等概率的,概率均為 1 n \frac{1}{n} n1?。但是由于凡凡也很喜歡郵票,所以皮皮購買第k 張郵票需要支付 k k k 元錢。現在皮皮手中沒有郵票,皮皮想知道自己得到所有種類的郵票需要花費的錢數目的期望。

Format

Input

一行,一個數字 n n n

Output

要付出多少錢. 保留二位小數

Samples

輸入數據 1

3

輸出數據 1

21.25

1 ≤ n ≤ 1 0 4 1\leq n\leq 10^4 1n104

思路

這一道題目堪稱牛逼,需要數學功底。

P ( x , i ) P(x,i) P(x,i) 表示買 x x x 次能從 i i i 種買到 n n n 種的概率

f i f_i fi? 表示現在有 i i i 張,買到 n n n 張的期望。

那么有:
f i = ∑ x = 0 ∞ x × P ( x , i ) ? f i = n ? i n × f i + 1 + i n × f i + 1 ? n × f i = ( n ? i ) × f i + 1 + i × f i + n ? ( n ? i ) × f i = ( n ? i ) × f i + 1 + n ? f i = f i + 1 + n n ? i . f_i=\sum_{x=0}^\infty x\times P(x,i)\\ \begin{align} &\Leftrightarrow f_i=\frac{n-i}{n}\times f_{i +1} + \frac{i}{n}\times f_i+1\\ &\Leftrightarrow n\times f_i=(n-i)\times f_{i+1}+i\times f_i+n\\ &\Leftrightarrow (n-i)\times f_i=(n-i)\times f_{i+1}+n\\ &\Leftrightarrow f_i=f_{i+1}+\frac{n}{n-i}. \end{align} fi?=x=0?x×P(x,i)??fi?=nn?i?×fi+1?+ni?×fi?+1?n×fi?=(n?i)×fi+1?+i×fi?+n?(n?i)×fi?=(n?i)×fi+1?+n?fi?=fi+1?+n?in?.??
顯然 f n = 0. f_n=0. fn?=0.

考慮設 g i , j g_{i,j} gi,j? 表示有 i i i 張,下一張是 j j j 的期望。

顯然: g i , j → g i , j + 1 g_{i,j}\rightarrow g_{i,j+1} gi,j?gi,j+1? 的概率為 i n \frac{i}{n} ni? g i , j → g i + 1 , j + 1 g_{i,j}\rightarrow g_{i+1,j+1} gi,j?gi+1,j+1? 的概率為 n ? i n \frac{n-i}{n} nn?i?,并且付出代價為 j . j. j.

顯然有:
g i , j = i n × g i , j + 1 + n ? i n × g i + 1 , j + 1 + j g_{i,j}=\frac{i}{n}\times g_{i,j+1}+\frac{n-i}{n}\times g_{i+1,j+1}+j gi,j?=ni?×gi,j+1?+nn?i?×gi+1,j+1?+j
因為這是一個遞推式,不妨考慮它的性質:
g i , j = ∑ x = 0 ∞ [ j + ( j + 1 ) + ? + ( x + j ? 1 ) ] × P ( x , i ) = ∑ x = 0 ∞ x × ( x + 2 × j ? 1 ) 2 × P ( x , i ) \begin{align} g_{i,j}&=&&\sum_{x=0}^\infty\left[j+(j+1)+\dots+(x+j-1) \right]\times P(x,i)\\ &=&&\sum_{x=0}^\infty\frac{x\times(x+2\times j-1)}{2}\times P(x,i)\end{align} gi,j??==??x=0?[j+(j+1)+?+(x+j?1)]×P(x,i)x=0?2x×(x+2×j?1)?×P(x,i)??
考慮與 g i , j + 1 g_{i,j+1} gi,j+1? 發生聯系,做差發現:
g i , j + 1 ? g i , j = ∑ x = 0 ∞ x × ( x + 2 × j + 1 ? x ? 2 × j + 1 ) 2 × P ( x , i ) = ∑ x = 0 ∞ x × 2 2 × P ( x , i ) = f i ∴ g i , j = g i , j + 1 ? f i . \begin{align}g_{i,j+1}-g_{i,j}=\sum_{x=0}^\infty\frac{x\times(x+2\times j+1 - x-2\times j+1)}{2}\times P(x,i)\\ = \sum_{x=0}^\infty \frac{x\times2}{2}\times P(x,i)= f_i\\ \therefore g_{i,j}=g_{i,j+1}-f_i. \end{align} gi,j+1??gi,j?=x=0?2x×(x+2×j+1?x?2×j+1)?×P(x,i)=x=0?2x×2?×P(x,i)=fi?gi,j?=gi,j+1??fi?.??
化簡該式子:
g i , j = g i , j + 1 × i n + g i + 1 , j + 1 × n ? i n + j ? g i , j = ( g i , j + f i ) × i n + ( g i + 1 , j + f i + 1 ) × n ? i n + j ? n × g i , j = i × ( g i , j + f i ) + ( g i + 1 , j + f i + 1 ) × ( n ? i ) + n × j ? n × g i , j = i × g i , j + i × f i + n × g i + 1 , j ? i × g i + 1 , j + n × f i + 1 ? i × f i + 1 + n × j ? ( n ? i ) × g i , j = ( n ? i ) × g i + 1 , j + i × f i + ( n ? i ) × f i + 1 + n × j ? g i , j = g i + 1 , j + f i + 1 + i × f i + n × j n ? i ? g i , j = g i + 1 , j + f i + 1 + f i × i n ? i + n × j n ? i g_{i,j}=g_{i,j+1}\times \frac{i}{n}+g_{i+1,j+1}\times\frac{n-i}{n}+j\\ \begin{align} &\Leftrightarrow& g_{i,j}=(g_{i,j}+f_i)\times\frac{i}{n}+(g_{i+1,j}+f_{i+1})\times\frac{n-i}{n}+j\\ &\Leftrightarrow& n\times g_{i,j}=i\times(g_{i,j}+f_i)+(g_{i+1,j}+f_{i+1})\times(n-i)+n\times j\\ &\Leftrightarrow&n\times g_{i,j}=i\times g_{i,j}+i\times f_i+n\times g_{i+1,j}-i\times g_{i+1,j}+n\times f_{i+1}-i\times f_{i+1}+n\times j\\ &\Leftrightarrow& (n-i)\times g_{i,j}=(n-i)\times g_{i+1,j}+i\times f_i+(n-i)\times f_{i+1}+n\times j\\ &\Leftrightarrow& g_{i,j}=g_{i+1,j}+f_{i+1}+\frac{i\times f_i+n\times j}{n-i}\\ &\Leftrightarrow& g_{i,j}=g_{i+1,j}+f_{i+1}+f_i\times\frac{i}{n-i}+\frac{n\times j}{n-i} \end{align} gi,j?=gi,j+1?×ni?+gi+1,j+1?×nn?i?+j????????gi,j?=(gi,j?+fi?)×ni?+(gi+1,j?+fi+1?)×nn?i?+jn×gi,j?=i×(gi,j?+fi?)+(gi+1,j?+fi+1?)×(n?i)+n×jn×gi,j?=i×gi,j?+i×fi?+n×gi+1,j??i×gi+1,j?+n×fi+1??i×fi+1?+n×j(n?i)×gi,j?=(n?i)×gi+1,j?+i×fi?+(n?i)×fi+1?+n×jgi,j?=gi+1,j?+fi+1?+n?ii×fi?+n×j?gi,j?=gi+1,j?+fi+1?+fi?×n?ii?+n?in×j???
顯然這里的 j j j 對于轉移是無用的,因為我們只需要知道 j = 1 j=1 j=1 的答案,所以說我們的轉移如下:
g i = g i + 1 + f i + 1 + f i × i n ? i + n n ? i g_{i}=g_{i+1}+f_{i+1}+f_i\times\frac{i}{n-i}+\frac{n}{n-i} gi?=gi+1?+fi+1?+fi?×n?ii?+n?in?
于是我們用 O ( n + n ) O(n+n) O(n+n) 解決了這道題目。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iomanip>
#define N 10005
#define ld long double
using namespace std;
int n;
ld f[N],g[N];
int main(){cin >> n;for (int i = n - 1;i >= 0;i --) f[i] = f[i + 1] + 1.0 * n / (n - i);for (int i = n - 1;i >= 0;i --) g[i] = g[i + 1] + f[i + 1] + f[i] * 1.0 * i / (n - i) + 1.0 * n / (n - i);cout << fixed << setprecision(2) << g[0];return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/10938.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10938.shtml
英文地址,請注明出處:http://en.pswp.cn/web/10938.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【elasticsearch】慢查詢替代查詢審計的嘗試

【elasticsearch】慢查詢替代查詢審計的嘗試 使用了es有兩年了&#xff0c;突然發現一個&#xff0c;es沒有查詢審計日志&#xff0c;某個用戶查詢了某個索引的審計。 找了官方文檔和社區的回復都是說使用slow log替代慢查詢。 嘗試一下。 參考鏈接1&#xff1a;https://discus…

Py深度學習基礎|關于Batch Normalization

1. 為什么需要Batch Normalization 通常我們會在輸入層進行數據的標準化處理&#xff0c;這是為了讓模型學習到更好的特征。同樣&#xff0c;在模型的中間層我們也可以進行normalize。在神經網絡中, 數據分布對訓練會產生影響。 比如我們使用tanh作為激活函數&#xff0c;當輸入…

Baidu Comate智能編碼助手:AI編程時代提升效率的好幫手

目錄 寫在前面一、如何安裝二、如何使用場景需求體驗步驟 三、AI 編程實戰指令功能插件功能知識庫功能 四、問題建議五、體驗總結&#x1f680;寫在最后 寫在前面 Baidu Comate 是基于文心大模型的 AI編程工具&#xff0c;它結合百度積累多年的編程現場大數據和外部優秀開源數據…

MySQL中的多表查詢

數據庫設計范式(范例) 好的數據庫設計&#xff0c;事倍功半&#xff0c;不會有歧義 第一范式&#xff1a;列保證原子性&#xff08;列不可再分解&#xff09; 聯系方式&#xff1a;電話&#xff0c;微信&#xff0c;QQ&#xff0c;郵箱 這些都不可分解 第二范式&#xff1a;要…

annaconda詳細解讀換源文件

annaconda換源詳細解讀文件 annaconda換源詳細解讀文件 annaconda換源詳細解讀文件 #踩坑/annaconda換源詳細解讀通道問題 如何準確使用國內源高效安裝GPU版本的Pytorch - 知乎 文件中的custom通道&#xff0c;需要自己手動添加到默認通道里面&#xff0c;記得后面更上/包名…

在xAnyLabeling中加載自己訓練的yolov8s-obb模型進行半自動化標注

任務思路&#xff1a; 先使用xAnyLabeling標注一部分樣本&#xff0c;訓練出v1版本的yolov8-obb模型&#xff0c;然后加載yolov8-obb模型到xAnyLabeling中對其余樣本進行半自動化標注。節省工作量。 任務流程&#xff1a; 1.準備xAnyLabeling標注工具 下載代碼&#xff0c;…

Redis系列-3 Redis緩存問題

1.緩存的作用 數據庫(如Mysql)的持久化特點帶來了較低的性能&#xff0c;高并發的場景下&#xff0c;連接池很快被耗盡而出現宕機或DOS&#xff0c;無法繼續對外提供服務。相對于數據庫的硬盤IO&#xff0c;緩存中間件基于內存進行讀寫&#xff0c;從而具備較大的吞吐量和高并…

SpringBoot:注解詳解

RequestMapping 注解在類上:表示該類中所有響應請求的方法都以此地址為父路徑 value&#xff08;path&#xff09; 指定請求的實際訪問地址&#xff0c;默認RequestMapping(“url”)的值url即為value的值。指定的地址可以是 URI Template 模式。 method 指定請求的method類型…

數據結構(四)——二叉樹和堆(下)

制作不易&#xff0c;三連支持一下唄&#xff01;&#xff01;&#xff01; 文章目錄 前言一、二叉樹鏈式結構的實現總結 前言 這篇博客我們將來了解普通二叉樹的實現和應用&#xff0c;對大家之前分治和遞歸的理解有所挑戰。 一、二叉樹鏈式結構的實現 1.前置說明 在學習二叉…

Java入門——繼承和多態(上)

包 包是組織類的一種方式. 使用包的主要目的是保證類的唯一性. 例如, 你在代碼中寫了一個 Test 類. 然后你的舍友也可能寫一個 Test 類. 如果出現兩個同名的類, 就會沖突, 導致 代碼不能編譯通過. 導入包中的類 Java 中已經提供了很多現成的類供我們使用. 例如 public cla…

服裝店會員管理系統結合小程序商城幫你挖掘出潛在客戶

在現代社會&#xff0c;隨著科技的不斷進步和人們消費習慣的變化&#xff0c;傳統的服裝店已經不再能夠滿足消費者的需求。為了更好地服務客戶&#xff0c;提升銷售業績&#xff0c;許多服裝店開始引入會員管理系統&#xff0c;并結合小程序商城&#xff0c;實現線上線下的無縫…

LeetCode-2079. 給植物澆水【數組 模擬】

LeetCode-2079. 給植物澆水【數組 模擬】 題目描述&#xff1a;解題思路一&#xff1a;簡單的模擬題&#xff0c;初始化為0&#xff0c;考慮先不澆灌每一個植物解題思路二&#xff1a;初始化為n&#xff0c;考慮每一個植物需要澆灌解題思路三&#xff1a;0 題目描述&#xff1a…

在ubuntu安裝Docker容器

1、進入root用戶模式 sudo -i 回車后&#xff0c;輸入root的密碼即可進入root模式2、在ubuntu上安裝docker &#xff08;1&#xff09;直接使用 apt 安裝&#xff0c;一般這樣也自動啟動好了 apt install docker.io3、驗證安裝成功&#xff0c;以及啟動與校驗 &#xff08;…

C++11:常用語法匯總

目錄 &#x1f341;統一的列表初始化 { }initializer_list &#x1f341;decltype 推導表達式類型&#x1f341;可變參數模板解析可變參數包方法一方法二 &#x1f341;lambda 表達式捕捉列表的使用運用場景舉例lambda表達式 與 函數對象 &#x1f341;統一的列表初始化 { } 在…

STM32F407-驅動SHT41采集溫濕度

STM32F407-驅動SHT41采集溫濕度 SHT41 SHT41通過I2C方式進行驅動 從機地址&#xff1a; 0x44 獲取數據方式 1&#xff09;先發送I2C寫&#xff0c;寫入特定指令 2&#xff09;延時一段時間&#xff0c;等待SHT41處理 3&#xff09;再進行I2C讀&#xff0c;讀數據即可 一些…

Ansible(二)

一、Playbook基礎 1.1 Playbook定義 Playbook其實是Ansible服務的一個配置文件&#xff0c;Ansible使用Playbook的YAML語言配置編寫成操作需求&#xff0c;實現對遠端主機或策略部署&#xff0c;實現對遠端主機的控制與管理。 1.2 Playbook組成 Tasks&#xff1a;任務&…

【Qt 學習筆記】Qt常用控件 | 布局管理器 | 垂直布局Vertical Layout

博客主頁&#xff1a;Duck Bro 博客主頁系列專欄&#xff1a;Qt 專欄關注博主&#xff0c;后期持續更新系列文章如果有錯誤感謝請大家批評指出&#xff0c;及時修改感謝大家點贊&#x1f44d;收藏?評論? Qt常用控件 | 布局管理器 | 垂直布局Vertical Layout 文章編號&#x…

skynet - spinlock 簡單的自旋鎖

spinlock.h 代碼位于&#xff1a; https://github.com/cloudwu/skynet/blob/master/skynet-src/spinlock.h 該文件內&#xff0c;根據不同環境提供了 3 種 api 實現&#xff1a; pthread_mutex_t 系列函數gcc 內置原子操作函數std atomic 系列函數 看了下&#xff0c;效率最…

滲透測試-信息收集

網絡安全信息收集是網絡安全領域中至關重要的一環&#xff0c;它涉及到對目標系統、網絡或應用進行全面而細致的信息搜集和分析。這一過程不僅有助于理解目標網絡的結構、配置和潛在的安全風險&#xff0c;還能為后續的滲透測試、風險評估和安全加固提供有力的支持。 在網絡安…

安卓開發--新建工程,新建虛擬手機,按鍵事件響應(含:Android中使用switch-case遇到case R.id.xxx報錯)

安卓開發--新建工程&#xff0c;新建虛擬手機&#xff0c;按鍵事件響應 1.前言2.運行一個工程2.1布局一個Button2.2 button一般點擊事件2.2 button屬性點擊事件2.2 button推薦點擊事件&#xff08;含&#xff1a;Android中使用switch-case遇到case R.id.xxx報錯&#xff09; 本…