ural1223 鷹蛋(dp優化)

2021-08-07 14:29:17 字數 1125 閱讀 2168

有一堆共 m 個鷹蛋,一位教授想研究這些鷹蛋的堅硬度 e。他是通過不斷 從一幢 n 層的樓上向下扔鷹蛋來確定 e 的。當鷹蛋從第 e 層樓及以下樓層落下 時是不會碎的,但從第(e+1)層樓及以上樓層向下落時會摔碎。如果鷹蛋未摔 碎,還可以繼續使用;但如果鷹蛋全碎了卻仍未確定e,這顯然是乙個失敗的實 驗。教授希望實驗是成功的。 例如:若鷹蛋從第 1 層樓落下即摔碎,e=0;若鷹蛋從第n層樓落下仍未碎,

e=n。 這裡假設所有的鷹蛋都具有相同的堅硬度。給定鷹蛋個數 m 與樓層數 n。

要求最壞情況下確定e 所需要的最少次數。

dp[i][j]表示用 i 個蛋在 j 層樓上最壞情況下確定答案所需要的最少次數

若蛋在w層碎了,那麼答案在w-1那些層裡面,(w是二分來的,因為二分是理論上快的),fdp【i-1】,【w-1】+1

若沒碎,答案在w到n的那些層裡面,dp【i】【j-w】)+1

兩個中取較大的值,因為是最壞條件下,所以這兩種都可能發生的話選更不好的,

迴圈ijw o(n^3)

優化:

首先如果蛋很多,多到夠二分,那麼結果一定是二分的值

如圖可以看出best的位置是dp最優選擇,所以二分找dp【i-1】【w】 = dp[i][j-w]的w值。。

#include 

#include

#include

#include

using

namespace

std;

const

int maxn = 1100;

const

int inf = 1e9+7;

int dp[2][maxn];

int egg,n;

void bi_se(int f,int i,int j)

else

if(dp[f^1][mid-1] == dp[f][j-mid])

else

}}void sov()

}printf("%d\n",dp[now][n]);

}int main()

}

1 22 學習報告

習題5 7qsort函式未完成 5 7 readlines.cpp 定義控制台應用程式的入口點。掌握指標陣列的使用方法 從控制台中讀入字元,儲存在指標陣列中,需要考慮的問題是陣列空間大小的問題 將文字進行排序 最後將排序的文字輸出出來 讀取所有輸入行 對文字行進行排序 按次序列印文字行 includ...

日常筆記 1 22

1,用for迴圈展開二維列表 也可以用numpy中的其他方法實現 list c 1,2 3,4 4,5 list j for i in list c for j in i out 1 2,3 4,4 5 map 是python的內建函式 用於series上,是元素級別的操作 在資料清洗時可用來查詢資...

12 2學習筆記

a long term experiment to investigate the relationships between high school students perceptions of mobile learning and peer interaction and higher or...