搜尋很重要,是很難學的演算法,能看懂很簡單,但是要想真正做出題來就比較困難了,那麼,我們現在就水題開始研究搜尋。
水題之:
time limit: 1 sec memory limit: 162 mb
submit: 830 solved: 572
[submit][status][discuss]
windy的生日到了,為了慶祝生日,他的朋友們幫他買了乙個邊長分別為 x 和
y 的矩形蛋糕。 現在包括windy,一共有 n 個人來分這塊大蛋糕,要求每個人必須獲得相同面積的蛋糕。
windy主刀,每一切只能平行於一塊蛋糕的一邊(任意一邊),並且必須把這塊蛋糕切成兩塊。 這樣,要切成 n 塊蛋糕,windy必須切 n-1
次。 為了使得每塊蛋糕看起來漂亮,我們要求 n 塊蛋糕的長邊與短邊的比值的最大值最小。 你能幫助windy求出這個比值麼?
包含三個整數,x y n。
包含乙個浮點數,保留6位小數。
5 5 5
1.800000
【資料規模和約定】
100%的資料,滿足 1 <= x,y <= 10000 ; 1 <= n <= 10
b站上不去的看這裡~~~~tyvj題目連線:
沒錯這個真的是bzoj的題,而且,不難做
我們乍一看好像沒有什麼思路,而實際上我們要求每一部分的面積相等就是要求:每次分割後得到的兩個蛋糕的面積與分割後蛋糕應該再分的塊數成正比。
好了,這樣我們就可以將某一狀態確定下來了。
確定乙個狀態的因素:當前蛋糕的長x,蛋糕的寬y,這塊蛋糕應該被分成的部分數k(正像某大神跟我說的:搜尋的狀態,題目給你什麼你就往裡面塞什麼)
狀態確定後,下乙個問題就是如何實現狀態的轉移了。
不難發現,狀態轉移的過程就是切,分割當前的蛋糕。
然後我們僅需要列舉分割點就好了,這裡比較難理解,結合**說一下:
1就是這樣了?沒錯,真的只有這麼短。for(int i=1;i)
2
好了,我們來看一下,我們可以理解為把我們的x*y的蛋糕分成單位為1*1的小塊,然後列舉一下橫著切分成i*y和(x-i)*y的兩部分,然後遞迴求解這兩塊蛋糕的最優答案。對於y也是這樣
邊界:當只需要將當前的蛋糕分成1塊的時候,返回長寬比就行了。
比較水,暴搜就能過
ac**:
1 #include2 #include3cakeusing
namespace
std;
4int
num;
5double
n,m;
6double dfs(double x,double y,intk)7
16return
ans;17}
18int
main()
19
NYOJ 噴水裝置一 水題(貪心)
時間限制 3000 ms 記憶體限制 65535 kb 難度 3描述 現有一塊草坪,長為20公尺,寬為2公尺,要在 橫中心線 上放置半徑為ri的噴水裝置,每個噴水裝置的效果都會讓以它為中心的半徑為實數ri 0輸入 第一行m表示有m組測試資料 每一組測試資料的第一行有乙個整數數n,n表示共有n個噴水裝...
水題系列之一
實驗任務 給定乙個正整數 n,找出另乙個正整數 m,使得 n 和 m 轉化為二進位制時,它們所出現的 1 的個數一致,且 m 必須比 n 大。輸出乙個滿足條件的最小的 m。例如 78,轉換成二進位制為 1001110,這個二進位制數中有 4 個 1 而 83 1010011 和 86 1010110...
NYOJ 題目6 噴水裝置(一) 水貪心
半徑1或者以下的噴水裝置毫無用處,因為題目是要求在乙個矩形的兩條長為20公尺的邊的中位在線裝噴水器,而且要求全部覆蓋,且寬為2公尺。按半徑大小從大到小排序,之後進行貪心。時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 現有一塊草坪,長為20公尺,寬為2公尺,要在橫中心線上放置...