原題
先來一波江哥的解題報告殺
這種方法十分的高深莫測,所以我們換乙個容易理解的:
f(i,j)表示前i個選j個,且第i個必選,那麼就是江哥的轉移方程
p.s:但是不會字首和優化!
顯然,這樣的方法只能獲得30分,資料十分的坑,那麼優化如下:
f(i,j,0)表示前i個裡面選j個且第i個不選
f(i,j,1)表示前i個裡面選j個且第j個選
f(i,j,0)=max;//強調,一定要取max,不然會爆0
f(i,j,1)=f(i-1,j-1,0)+a[i];//這裡為了優化,表示第i-1個不選的最大的分,然後累加就可以了
答案儲存在max中
所以瞬間ac,演算法效率n^2;
#include
#include
#include
#include
#include
using
namespace
std;
const
int inf=1000000000+10;
long
long a[1010],f[1010][1010][2];
int main()
printf("%lld\n",max(f[n][m][0],f[n][m][1]));
return
0;}
CODE VS 江哥的DP題b
原題 江哥解題報告 我們不妨按照江哥dalao的思路來寫 設f i,j 表示a中列舉到了第i個,b中列舉到了第j個,則 a i b j f i,j f i 1,j 1 1 如果相等就可以增加一條線 a i b j f i,j max a1,b1是要幹什麼呢?不妨看一看這張圖 找到當前b j 所對應的...
江哥的DP題(A)
題目描述 給定乙個長度為n的序列a a1 a2 a3 an 取k個互不相同的元素,使得 1 兩兩元素互不相鄰 2 元素之和最大。輸入描述 第一行輸入兩個正整數n k 第二行輸入n個整數,表示序列a中的元素。輸出描述 輸出乙個整數,表示最大和。樣例輸入 樣例1 7 33 5 7 1 9 10 7 樣例...
江哥的DP題(F)
題目描述 有乙個n m的棋盤,每個格仔都有乙個權值,規定路徑必須滿足下列條件 1 從左上角出發,於右下角結束 2 不經過重複的格仔 3 每一步都不會向左走 現詢問路徑經過的格仔的權值和最小能夠為多少。輸入描述 第一行輸入兩個整數n m 接下來n行,每行輸入m個整數,表示每個格仔的權值。輸出描述 輸出...