很自然的想法,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,其型...