一維消消樂是一款非常簡單的遊戲。有 顆珠子排成一排,每一顆珠子有乙個價值 (可能是負數)。
遊戲是這樣,你可以選擇如若干對相鄰的珠子,讓他們同時消去。每一對珠子的消失,都會使得總
分數加上兩顆珠子相乘的分數。注意,每個珠子只能消一次,並且珠子消去以後,還會佔位。
輸入格式
輸入第一行乙個整數 。
接下來一行輸入 個整數 。
輸出格式
輸出最大的分數。
輸出時每行末尾的多餘空格,不影響答案正確性
in ,輸出
樣例輸入8-
9-5-
4-24
-5-4
2樣例輸出
73
動態dp問題,問題的關鍵在於找到狀態描述量和狀態轉移方程用乙個二維陣列進行描述dp[i][1] 第i個數與前一項合成 當前的分數最大值.狀態描述: 1.是否與前一項合併
2.是第幾個數
dp[i][0] 第i個數不與前一項合成 當前的分數最大值.
狀態轉移方程
不與前一項合併dp[i][0]=max(dp[i-1][0],dp[i-1][1])
與前一項合併,則前一項不會與前一項的前一項合併
dp[i][1]=dp[i-1][0]+w[i]*w[i-1]
#include
using namespace std;
int dp[
10005][
2];int w[
10003];
int n;
int main()
for(int i=
1;i<=n;i++
) cout<
<
max(dp[n][1
],dp[n][0
])<
return0;
}
牆壁塗色
蒜頭君覺得白色的牆面好單調,他決定給房間的牆面塗上顏色。他買了 種顏料分別是紅、
黃、藍,然後把房間的牆壁豎直地劃分成 個部分,蒜頭希望每個相鄰的部分顏色不能相
同。他想知道一共有多少種給房間上色的方案。
例如,當 時,下面就是一種合法方案。
由於牆壁是乙個環形,所以下面這個方案就是不合法的。
輸入格式
乙個整數 ,表示房間被劃分成多少部分。( )
輸出格式
乙個整數,表示給牆壁塗色的合法方案數。
輸出時每行末尾的多餘空格,不影響答案正確性
要求使用「檔案輸入輸出」的方式解題,輸入檔案為 painting.
in ,輸出檔案為 painting.out
樣例輸入
4樣例輸出183
nn =
5n 1 ≤ n ≤ 50
12
345…
9…n-3n-2
n-1n
只有乙個位置,一緯狀態,開乙個一維陣列即可
f(n)的可能性分類討論如下
1與n-1的顏色不同
在前n-1個都排好的情況下,f(n-1)*1
1與n-1顏色相同
在前n-2個都排好的情況下,n有兩種可能性,f(n-2)*2
#include
using namespace std;
const int n =
1e3+9;
long long f[n]
;int main()
cout <
< f[n]
<
return0;
}
揹包問題(一維dp)
揹包問題可謂是經典的動態規劃問題,這裡就給出01揹包,完全揹包,多重揹包的核心內容吧。可以作為模板用哦 見 1 01揹包 w i 代表重量,v i 代表價值,v代表揹包容量 for int i 0 i w i j dp j max dp j w i v i dp j 2 完全揹包 完全揹包跟01揹包...
01揹包問題一維與二維解法
演算法思路 f i j 表示的是只看前i個物品裡面,體積為j種最大的價值 那就分為兩種,拿和不拿 1.f i j f i 1 j 你不拿的情況和f i 1 j 一致 2.f i j max f i j f i 1 j v i w i 從小到大依次計算即可 include include includ...
指標與一維陣列,二維陣列的位址問題
include void main 對於一維陣列的位址 1,值 1的問題 include void main 輸出結果 6356716 6356720 2 6356720 可以看出對位址 1是 4,是因為int型別佔四個位元組,加乙個int的位址,相當於加了四個位元組的位址。對於二維陣列的位址 1問...