藍書 312 烏龜棋 兩種解法

2021-10-01 05:26:56 字數 795 閱讀 8681

很自然的想法,f[n][41][41][41][41]. 表示到第i個點,4種卡片剩餘個數,最大得分。

遞推很簡單,看下就懂。

不過時間複雜度是350*40*40*40*40會t。

這個時候就有2種優化:

第一種: 1977ms,1496kb

由於總卡片數固定,且最後都用完,我們可以省去一維卡片。

f[n][41][41][41],到達某個點,前三種卡片數量知道了,最後一種的個數也就知道了。

到達終點的狀態一定是f[n][0][0][0].(第四種一定也是0,不然到不了終點)

由於終點狀態確定,我們就沒必要算出第四種卡片數量來限制了。直接算就行。(如果四種卡片數量任意,就要算第四種卡片數量,來進行約束,也就是乙個if的事情)

然後就是,這樣空間會mle。86mb,題目只給了64mb.

所以還要再優化,我們採用滾動陣列的思想。發現  每次i只對i+1,i+2,i+3,i+4有影響,即每次只用到5個。

我們用取模5來進行滾動即可。

注意每次清空無用的陣列,這題比較特殊,後面的點一定大於前面的點,所以就沒必要清空了

#include using namespace std;

typedef long long ll;

int f[6][41][41][41];//爬行到i時,1,2,3卡片還剩j,k,l時,能得到的分數最多是多少

int a[350];

int nm[5];

int main()

} cout

}

Bacon Number 兩種解法

view code 題目 cid 567 題目分析 與longth way 類似 這個好象就是傳說中的六度人脈,你只要通過六度人脈就可以找到世界上的任何乙個人。假設乙個人一生會認識n個人,那n n 1 n 2 n 3 n 4 n 5 n 6 世界總人數。給定一些邊確定乙個圖,即給定一些點之間的連通情...

The Longest Path 兩種解法

view code 題目 cid 567 題目分析 給定一些邊確定乙個圖,即給定一些點之間的連通情況,保證給定的圖沒有迴路,要求輸出該圖存在的最長路徑。思路分析 根據給定資訊構造圖,用鄰接表表示。鄰接矩陣明顯很麻煩且效率不高 將每乙個頂點看成是樹根,求出樹的高度。得到一系列樹的高度,最大的那個就是圖...

FBI樹兩種解法

問題描述 我們可以把由 0 和 1 組成的字串分為三類 全 0 串稱為b串,全 1 串稱為i串,既含 0 又含 1 的串則稱為f串。fbi樹是一種二叉樹,它的結點型別也包括f結點,b結點和i結點三種。由乙個長度為2n的 01 串s可以構造出一棵fbi樹t,遞迴的構造方法如下 1 t的根結點為r,其型...