藍橋杯2023年B組04 c c (測試次數)

2021-10-08 10:15:12 字數 1144 閱讀 6465

題目描述x星球的居民脾氣不太好,但好在他們生氣的時候唯一的異常舉動是:摔手機。

各大廠商也就紛紛推出各種耐摔型手機。x星球的質監局規定了手機必須經過耐摔測試,並且評定出乙個耐摔指數來,之後才允許上市流通。

x星球有很多高聳入雲的高塔,剛好可以用來做耐摔測試。塔的每一層高度都是一樣的,與地球上稍有不同的是,他們的第一層不是地面,而是相當於我們的2樓。

如果手機從第7層扔下去沒摔壞,但第8層摔壞了,則手機耐摔指數=7。

特別地,如果手機從第1層扔下去就壞了,則耐摔指數=0。

如果到了塔的最高層第n層扔沒摔壞,則耐摔指數=n

為了減少測試次數,從每個廠家抽樣3部手機參加測試。

某次測試的塔高為1000層,如果我們總是採用最佳策略,在最壞的運氣下最多需要測試多少次才能確定手機的耐摔指數呢?

請填寫這個最多測試次數。

注意:需要填寫的是乙個整數,不要填寫任何多餘內容。

這個題的整體解題思路,alex 007在《徹底掌握動態規劃》

如果有n個手機,t層樓,求出最壞的情況經過多少次測試能找大臨界樓層。

即求乙個函式:

m(t,n)=?

如果樓層t為1,那麼測試次數一定為1;

如果手機個數為一,那麼最壞情況一定要測試t次;

下面分析其他情況:

假設第一次扔手機在第k層,而臨界樓層在1~k層之間,接下來的問題就變成了在1~k層之間用n-1個手機測試:

m(k-1,n-1)=?

如果a手機在第k層沒碎,接下來的問題,就變成了k+1~t層之間,用n個手機的測試

m(t-k,n)=?

我們的目標是求出最壞惡毒情況,因此需要對者兩種情況取最大值,同時還要加上第一次測試的次數:

mk(t,n)=1+max

k的範圍是 1<=k<=t,可以通過迴圈來計算,我們是想求最優情況下扔多少次手機才能找到臨界樓層,因此可以列出下式:

m(t,n)=min

code

#include

using

namespace std;

intmain()

dp[t]

[n]=num;}}

cout<999][2

];}

2023年藍橋杯C C 組B組第二題

include includeint a 30 int fun1 int num for int j last printf n if getasynckeystate 48 sum if j 29 if go 0 if k 27 a k 0 else if go 1 else if go 2 把剩...

2023年藍橋杯B組c c 第八題詳解

小明維護著乙個程式設計師論壇。現在他收集了乙份 點讚 日誌,日誌共有n行。其中每一行的格式是 ts id 表示在ts時刻編號id的帖子收到乙個 贊 現在小明想統計有哪些帖子曾經是 熱帖 如果乙個帖子曾在任意乙個長度為d的時間段內收到不少於k個讚,小明就認為這個帖子曾是 熱帖 具體來說,如果存在某個時...

2023年藍橋杯B組c c 第十題詳解

給定n個整數a1,a2,an。請你從中選出k個數,使其乘積最大。請你求出最大的乘積,由於乘積可能超出整型範圍,你只需輸出乘積除以1000000009的餘數。注意,如果x 0,我們定義x除以1000000009的餘數是負 x 除以1000000009的餘數。即 0 0 x 1000000009 第一行...