CODE VS 江哥的DP題a

2021-08-08 23:53:39 字數 826 閱讀 5311

原題

先來一波江哥的解題報告殺

這種方法十分的高深莫測,所以我們換乙個容易理解的:

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個整數,表示每個格仔的權值。輸出描述 輸出...