2018藍橋杯B組第4題 測試次數

2022-05-15 06:33:08 字數 2514 閱讀 8620

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

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

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

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

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

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

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

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

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

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

網上的大佬說這個是入門級的動態規劃,然而我連理解他們口中所說的入門級dp都理解了半天~~~,看來真正的菜雞就是我了

拿到這道題的時候,我第一反應就是:二分查詢!後來發現不對,題意的意思是:就給你3只手機!!!,二分查詢的情況得是你有無限只手機,(藍橋杯不愧是閱讀理解杯,真的很難理解題意)

遞迴的話呢,肯定得先有乙個dp[i][j],其中i代表使用了幾個手機,j代表驗證了幾層樓,即dp[i][j]的含義為用了i個手機驗證了j層樓,dp的結果為測試了幾次

當你只有乙個手機的時候,為了保證可以測出耐摔指數,你只能從第一層開始摔,因為你無法保證不知道你的耐摔指數是多少,而且而且你運氣很壞,所以可以得到dp[1][j]=j

接下來看有兩個手機的時候,兩個手機的時候你就有了一次容錯率,為了可以得到耐摔指數,你必須好好利用這一次容錯率,你得採取最優策略,而計算機的最優策略都是計算出來的。

模擬乙個場景,你在乙個3層的樓上,你手上拿了兩個手機,為了測出耐摔次數,最優策略就是你先拿出乙隻手機在2樓往下摔,之後有兩種情況:

第一只手機壞了,這時可以確定的是,上面的樓層(只剩下3-2層,即第3層)都不用去嘗試了,因為鐵定會壞,所以耐摔指數<2,這時你還得繼續摔,因為你不知道耐摔指數是1還是0,你剩下的第2只手機還是得從第1層上測試,所以測出這種情況的dp[2][3]=2

第一只手機沒壞!這時就可以確定耐摔指數》=k,而且你還剩下2只手機往上測試(血賺)。不過你還是只需要在測試一次就可以得到最終的耐摔指數,所以這種情況的dp[2][3]=2

接下來拓展到第[n]層,我們有[m]個手機。要得到耐摔指數,我們最後一次摔必定的得要得到乙個確切的值,即只剩下一層樓沒有判斷

我們先假設倒數第2次摔第k層為最優策略,則dp[m][n]=max(dp[m][n-k],dp[m-1][k-1])+1,

max是因為你是擁有最壞運氣的歐皇

+1是因為你又摔了一次

dp[m][n-k]的含義是你用了m部手機驗證了n-k層樓,而你那一次摔的手機的時候他沒有壞!,所以你可以繼續用那一部手機m

dp[m-1][k-1]的含義是你用了m-1部手機驗證了k-1層樓,而你那一次摔手機的時候他壞了,所以你得用一部新的手機m

k我們得用迴圈去找出最終的k值為多少時,才是最優策略

結合上述分析,得到的最終的遞迴式dp[m][n]=min(dp[m][n],max(dp[m][n-k],dp[m-1][k-1])+1)

之所以要來乙個min,是因為你得從2開始循壞k,找到最優的k,即最小的dp[m][n]

本人文筆不是很好,如果你看不懂我在說上面的話,請檢視這位大佬的部落格(寫的超級好,超級詳細,結尾還給出了乙個拓展,本人理解能力不夠,看不懂,如果哪位大牛看懂了,請與我私聊,教教我[真誠求教])

**

#include #include using namespace std;

typedef long long ll;

int dp[5][1010];

int main()

for(int i = 2;i<=m;i++)}}

printf("%d",dp[3][1000]);

return 0;

}

2018藍橋杯省賽B組 4 測試次數

x星球的居民脾氣不太好,但好在他們生氣的時候唯一的異常舉動是 摔手機。各大廠商也就紛紛推出各種耐摔型手機。x星球的質監局規定了手機必須經過耐摔測試,並且評定出乙個耐摔指數來,之後才允許上市流通。x星球有很多高聳入雲的高塔,剛好可以用來做耐摔測試。塔的每一層高度都是一樣的,與地球上稍有不同的是,他們的...

2018藍橋杯省賽 B組C 第9題 搜尋

題目分享鏈結 密碼 7m4a 你有一張某海域nxn畫素的 表示海洋 表示陸地,如下所示 其中 上下左右 四個方向上連在一起的一片陸地組成一座島嶼。例如上圖就有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 把剩...