51Nod1306 高樓和棋子

2022-05-09 13:30:15 字數 1428 閱讀 1017

題目看這裡

乙個非常好的逆向思維題(都是套路233)

如果直接做發現其實可以做,但是資料範圍太大不能過了,具體做法參考這裡

開始正文:

首先,我們設f[

i,j]

表示' role="presentation">f[i

,j]表

示f[i

,j]表

示在有i個棋子的情況下,扔j次能保證測出的樓層最高是多少,顯然如果n可以被測出,那麼n-1也可以被測出

於是考慮一下最優策略是什麼

在高度h扔乙個棋子下去,如果碎了,那麼說明高度

<

' role="presentation"><

<

h,如果沒碎說明高度》=h

於是可以寫出f[

i,j]

=f[i

−1,j

−1]+

f[i,

j−1]

+1' role="presentation">f[i

,j]=

f[i−

1,j−

1]+f

[i,j

−1]+

1f[i

,j]=

f[i−

1,j−

1]+f

[i,j

−1]+

1發現這個式子,f[i]大約是i次多項式的級別

所以對於i=1,i=2需要特判:f[

1][j

]=j,

f[2][j]

=j∗(

j+1)

2' role="presentation">f[1

][j]

=j,f

[2][

j]=j

∗(j+

1)2f

[1][

j]=j

,f[2

][j]

=j∗(

j+1)

2剩下的直接dp就可以了

回答每乙個詢問在

f' role="presentation">f

f二分就可以了

#pragma gcc optimize("o3")

#pragma g++ optimize("o3")

#include

#include

#include

#include

#include

#define n 2000000

#define ll unsigned long long

using

namespace

std;

vector

f[65];

ll n,m; int t;

int main()

}for(scanf("%d",&t);t--;) else

}}

51Nod1306 高樓和棋子

題目看這裡 乙個非常好的逆向思維題 都是套路233 如果直接做發現其實可以做,但是資料範圍太大不能過了,具體做法參考這裡 開始正文 首先,我們設f i,j 表示f i,j 表 示在有i個棋子的情況下,扔j次能保證測出的樓層最高是多少,顯然如果n可以被測出,那麼n 1也可以被測出 於是考慮一下最優策略...

51Nod1306 高樓和棋子 動態規劃

有個n層的高樓和若干個棋子,所有的棋子都是一樣的。棋子從樓的某層e扔到地上不會碎 0 e n 但從比這個樓層高的地方扔到地上都會碎。給出樓的高度n,以及棋子的數量m,你來找出這個e 0 e n 問最壞情況下需要實驗多少次才能計算出準確的e 如果棋子摔碎了,就不能繼續用這個棋子進行測試了 1 n 10...

51nod1534 棋子遊戲

1534 棋子遊戲 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 還有一些其它的限制,他們不能把棋子移動到x或y為負的座標,或者移動到已經被對手佔據的座標。最先到達 0,0 的人獲勝。現在給定他們棋子的座標,判斷一下誰會獲勝。input 單組測試資料。第一行包含...