887 雞蛋掉落

2021-10-14 09:33:21 字數 1096 閱讀 2200

就假如當前有n層樓要確認,k個雞蛋。那麼列舉當前雞蛋放在x後變成了兩個子問題dfs(x-1,k-1),dfs(n-x,k),dfs就好。複雜度為o(nkn)狀態數枚舉次數

考慮到dp[n][k]隨著n遞增而遞增,所以固定k對所有x畫圖後發現 dfs(x-1,k-1)遞增,dfs(n-x,k) 遞減。那麼要想使他倆的最大值最小直接二分就可以了(找到最後乙個l使得dfs(l-1,k-1)《=dfs(n-l,k) 和最小的r(前面的式子返回來))。

複雜度o(nk*log(n))

class

solution

} ans=1+

min(

max(

dfs(l-

1,k-1)

,dfs

(n-l,k)),

max(

dfs(n-r,k)

,dfs

(r-1

,k-1))

);} m[n*

1000

+k]=ans;

}return m[n*

1000

+k];

}public

:int

supereggdrop

(int k,

int n)

};

注意到對於dp[k][n] 的最優決策點一定在dp[k][n-1]的最優決策點右邊,所以可以o(n*k)直接dp

口胡證明:設dp[k][n-1]的決策點為x,那麼dp[k][n]的所有決策點的遞增函式和dp[k][n-1]的遞增函式影象是一致的(前n-1個),而遞減影象為dp[k][n-1]的遞減影象上移一定單位得到的,所以最優決策點,也就是交點,一定是向右移動的。

那麼我們在dp的時候維護乙個最優決策點的位置就好了

class

solution

swap

(dp,new_dp);}

return dp[n];}

public

:int

supereggdrop

(int k,

int n)

};

887 雞蛋掉落

你將獲得 k 個雞蛋,並可以使用一棟從 1 到 n 共有 n 層樓的建築。每個蛋的功能都是一樣的,如果乙個蛋碎了,你就不能再把它掉下去。你知道存在樓層 f 滿足 0 f n 任何從高於 f 的樓層落下的雞蛋都會碎,從 f 樓層或比它低的樓層落下的雞蛋都不會破。你的目標是確切地知道 f 的值是多少。無...

887 雞蛋掉落

你將獲得k個雞蛋,並可以使用一棟從1到n共有n層樓的建築。每個蛋的功能都是一樣的,如果乙個蛋碎了,你就不能再把它掉下去。你知道存在樓層f,滿足0 f n任何從高於f的樓層落下的雞蛋都會碎,從f樓層或比它低的樓層落下的雞蛋都不會破。你的目標是確切地知道f的值是多少。無論f的初始值如何,你確定f的值的最...

887 雞蛋掉落

你將獲得 k 個雞蛋,並可以使用一棟從 1 到 n 共有 n 層樓的建築。每個蛋的功能都是一樣的,如果乙個蛋碎了,你就不能再把它掉下去。你知道存在樓層 f 滿足 0 f n 任何從高於 f 的樓層落下的雞蛋都會碎,從 f 樓層或比它低的樓層落下的雞蛋都不會破。你的目標是確切地知道 f 的值是多少。無...