題目描述 description
給出乙個長度為n的序列a(a1,a2,a3,...,an)。現選擇k個互不相同的元素,要求: 1.兩兩元素互不相鄰
2.元素值之和最大
輸入描述 input description
第一行兩個正整數n,k。 接下來一行n個整數,描述a。
輸出描述 output description
輸出一行乙個整數,描述答案(最大和)。
樣例輸入 sample input
樣例1:
7 33 5 7 -1 9 10 7
樣例2:
7 33 21 7 -1 9 20 7
樣例輸出 sample output
樣例1:
樣例2:
資料範圍及提示 data size & hint
測試點編號 資料範圍
1,2,3 k≤n≤20
4,5,6,7,8,9,10 k≤n≤1000
/*view code比較水的dp
f[i][j][0/1]表示前i個數里取k個並且第i個取或不取的最大值,轉移方程就比
較好想了,另外可以用滾動陣列優化空間,鄙人比較懶,所以……
*/#include
#include
#define ll long long
#define m 1010
using
namespace
std;
ll f[m][m][
2],a[m];int
n,k;
intmain()
cout
<0],f[n][k][1
]);
return0;
}
江哥的DP題(A)
題目描述 給定乙個長度為n的序列a a1 a2 a3 an 取k個互不相同的元素,使得 1 兩兩元素互不相鄰 2 元素之和最大。輸入描述 第一行輸入兩個正整數n k 第二行輸入n個整數,表示序列a中的元素。輸出描述 輸出乙個整數,表示最大和。樣例輸入 樣例1 7 33 5 7 1 9 10 7 樣例...
CODE VS 江哥的DP題a
原題 先來一波江哥的解題報告殺 這種方法十分的高深莫測,所以我們換乙個容易理解的 f i,j 表示前i個選j個,且第i個必選,那麼就是江哥的轉移方程 p.s 但是不會字首和優化!顯然,這樣的方法只能獲得30分,資料十分的坑,那麼優化如下 f i,j,0 表示前i個裡面選j個且第i個不選 f i,j,...
江哥的DP題(F)
題目描述 有乙個n m的棋盤,每個格仔都有乙個權值,規定路徑必須滿足下列條件 1 從左上角出發,於右下角結束 2 不經過重複的格仔 3 每一步都不會向左走 現詢問路徑經過的格仔的權值和最小能夠為多少。輸入描述 第一行輸入兩個整數n m 接下來n行,每行輸入m個整數,表示每個格仔的權值。輸出描述 輸出...