以上三種問題都屬於一種問題,這裡我用鷹蛋問題為例進行分析
參考**:我這裡只講述動態規劃的解決方案。請耐心看完只有這篇完全詮釋了我的所有問題。
f[e**:][k]
f[e][k]
f[e][k
]代表有 ee
e雞蛋 kk
k層樓 找出答案的最小測試次數。
因為這個問題屬於運氣問題,故是不可控的,因為要求在最壞情況下,故f[e
][k]
=max
(f[e
−1][
i−1]
,f[e
][k−
i])+
1f[e][k]=max(f[e-1][i-1],f[e][k-i])+1
f[e][k
]=ma
x(f[
e−1]
[i−1
],f[
e][k
−i])
+1
上面就找出了有 e
ee個雞蛋 k
kk 層樓,在第i
ii層扔雞蛋的所需要的最小測試次數,(remember we need tomimimize the numberof drops in theworst case)
雖然運氣是不可控的,但是我們選取的i
ii是可控的,所以我們可以遍歷出所有的i,令f[e
][k]
f[e][k]
f[e][k
]選取其中最小的
遞推式f[e
][k]
=min
(max
(f[e
−1][
i−1]
,f[e
][k−
i])+
1)),
i∈[1
,k
]f[e][k]= min(+1)),i\in[1,k]
f[e][k
]=mi
n(ma
x(f[
e−1]
[i−1
],f[
e][k
−i])
+1))
,i∈[
1,k]
**記憶化搜尋即可
#include
using
namespace std;
const
int inf=
0x3f3f3f3f
;int f[
1010][
1010];
bool iscal[
1010][
1010];
void
init()
intf
(int e,
int k)
iscal[e]
[k]=
true
;return f[e]
[k]=minn;
}int
main()
return0;
}
UVa 10934 主要是思路
描述 你有一棟n層的大樓和k個球,詢問至少需要多少次確定球的硬度 分析 對於球的硬度,即是在高度為i時,球沒碎掉,而在高度為i 1時,球碎掉了,此時便可以確定球的硬度為i.主要是對於題目的理解 最壞情況是在最後一層但你不知道 約束在於球的個數有限制 完了分類 能否破掉進行轉移 code includ...
UVA 10934 經典DP,「扔水球」
題目大致意思就是 有n個水球,它們沒有區別。現在從樓上扔它們,自然當樓層很高時,水球就會炸掉。而且水球炸是有乙個臨界點的,比如在仍下去炸了,那在4,5,6 扔下去都會炸,1 2 就不會炸。現在問,給你k個水球,最壞情況下至少需要扔多少次,就能確定這個臨界點。如果只有乙個水球,n層樓,那結果就是n次。...
UVa10934 裝滿水的氣球
uva10934 解析 設還剩i個氣球,j次機會時能夠測得的最大高度為d i j 換句話說,就是d i j 層內,可以用i個氣球j次機會測出氣球硬度為j 可以知道 例項 include includeusing namespace std const int maxk 100 const int m...