luogu整理 P1244 青蛙過河

2022-05-05 16:27:08 字數 1242 閱讀 6416

這個題太騷了。。。。

有一條河,左邊乙個石墩(\(a\) 區)上有編號為 \(1,2,\ldots ,n\) 的 \(n\) 只青蛙,河中有 \(k\) 個荷葉(c 區),還有 \(h\) 個石墩(d 區),右邊有乙個石墩(b 區),如下圖所示。\(n\) 只青蛙要過河(從左岸石墩 a 到右岸石墩 b),規則為:

你的任務是對於給出的 \(h,k\),計算並輸出最多能有多少只青蛙可以根據以上規則順利過河。

輸入兩個整數 \(h,k\)。

乙個整數,表示最多能有多少只青蛙可以根據以上規則順利過河。

2 3
16
\(h≤20,k \leq 10^3\)

先理解一下題意:青蛙一開始都在左邊岸上,且先跳出的青蛙體型比後跳出的青蛙體型小(也就是先跳出的青蛙能坐在後跳出的青蛙上),青蛙可以選擇直接向河對岸跳,也可以從荷葉區、河墩區中轉一下到對岸。需要注意的是:一片河墩上面的第乙個青蛙,決定了這個河墩上青蛙的最大體型。(有點類似漢諾塔)

動態規劃,設\(f[h][k]\)表示用了h個河墩,k個荷葉最多的過河數量,那麼我們可以知道\(f[0][k] = k+1\)(前k個先到荷葉上,最後乙個直接到河對岸,前k個再到對岸)。

如果多用乙個河墩,我們就有:\(f[1][k] = f[0][k] + f[0][k] = 2f[0][k]\)含義:先讓第一隊青蛙用這k個荷葉中轉到河墩區河墩上(也就是\(f[0][k]\)只),再用讓第二隊青蛙通過荷葉直接到對岸(\(f[0][k]\)只)。最後讓第一隊的青蛙繼續利用荷葉中轉到對岸。整個過程符合題目要求。

兩個河墩,我們就可以讓第一隊青蛙利用k個荷葉和一號河墩中轉(\(f[1][k]\)只),到河墩區的二號河墩上,再讓二隊青蛙利用k個荷葉中轉到一號河墩上(\(f[0][k]\)只),再讓第三隊的青蛙直接利用荷葉中轉到對岸(\(f[0][k]\)只),最後二隊青蛙過岸、一隊青蛙過岸,就算是完成了,總數是\(f[2][k] = f[0][k]+f[0][k]+f[1][k] = 4f[0][k]\)只。

最終通過整理,我們發現:\(f[h][k] = f[0][k] \times 2^h = (k+1) \times 2^h\)。

#include #include #include using namespace std;

int main()

P1244 青蛙過河

p1244 青蛙過河 noi2000 主要思想 數學歸納法 遞推 壓位高精度 化歸 理解能力和找規律的能力 題意再述 1.青蛙從上到下必須連續遞增或者下面是石墩 而不能是 1 1 2 3 3 4 而且每時每刻都要滿足這個條件 2.左岸和右岸都是石堆 公式推導過程 k 0h 0 s 1 h 1 s 2...

洛谷 P1244 青蛙過河

有一條河,左邊乙個石墩 a區 上有編號為1,2,3,4,n的n只青蛙,河中有k個荷葉 c區 還有h個石墩 d區 右邊有乙個石墩 b區 如下圖所示。n只青蛙要過河 從左岸石墩a到右岸石墩b 規則為 1 石墩上可以承受任意多隻青蛙,荷葉只能承受乙隻青蛙 不論大小 2 青蛙可以 a b 表示可以從a跳到b...

luogu整理 P6599 異或

luogu p6599 異或 luogu cf1352g special permutation luogu cf1360f spy string 有 t 組詢問,每次給定兩個正整數 n,l 你需要構造乙個長度為 l 的正整數序列 a 編號從 1 至 l 且滿足 forall i in 1,l 都有...