POJ 1953 解題報告

2021-07-03 06:32:48 字數 789 閱讀 2546

這道題是簡單dp題。用zeros[i]表示長度為i的「合法」序列以0開頭的個數,同理ones[i]表示長度為i的合法序列以1開頭的數目,而nums[i]表示長度為i的合法序列的數目,於是有nums[i] = zeros[i] + ones[i]。

我們可以遞推地求所有的zeros和ones。從i - 1 到 i,由於0前面既可以加0,也可以加1,而1前面為避免出現連續的1只能加0,於是我們有:

zeros[i] = zeros[i - 1] + ones[i - 1];

ones[i] = zeros[i - 1];

可以先打表,再輸出。

thestoryofsnow

1953

accepted

168k

0msc++

/* 

id: thestor1

lang: c++

task: poj1953

*/#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

const int maxn = 45;

int main()

int t;

scanf("%d", &t);

for (int t = 0; t < t; ++t)

return 0;

}

再談POJ 1953 高手給出O n 演算法

題目大意 n為二進位制數列,要求不能出現連1,求數列可能種數?我原來寫了個遞迴演算法,結果tle,複雜度大概是o 2 n 後來,別人寫出了o n 的演算法。綜合比較來看,我的演算法相當於對所有符合條件的數列情形進行了遍歷,每次函式遞迴呼叫返回時都相當於找到了這樣乙個數列,甚至可以寫出此數列。而這是題...

poj解題報告 1328

不得不說,這題是讓我飽受折磨,畢竟第一次做貪心演算法,而且wa了好多次,幸好有學長的幫助,最終找到了問題所在,是在快排上是問題,double高位不可向int低位轉換,由於一開始強制轉換導致雖然樣例和其他的測試資料過了,但還是wa,現在改完了就對了,附上ac ps 這題通過率是22 真心不簡單 如下 ...

poj解題報告 2586

這題我是用的貪心演算法,其實不用也可以,列舉也能解決,因為情況不多。因為是每連續5個月必有虧損,而一年只有1 5,2 6,3 7,4 8 8 12共8種情況。現在設盈餘為s,虧損為d,可列出以下幾種情況。ssssdssssdss 4ssssddsssddss 3s 2d ssdddssdddss 2...