APCS202310第4題 投資遊戲

解題策略:DP,DP程式簡單,但要想出解法,不好想。這題要對DP很熟悉,且要能夠定義dp陣列的意義,避免重複計算,有一定的難度,參考以下吳教授的解。

參考:https://hackmd.io/@bangyewu/SkxXo4QGa


一、前言--最大子陣列DP解

v[i]為輸入的每一天獲利

dp[i]為第i天結束的最大獲利


相當於此題的K=0

dp[0] = max(0,v[0])

dp[i] = max(dp[i-1],0)+v[i]


二、定義陣列的意義

K>0

dp[j][i] 為第i天結束的最大獲利,且金牌使用小於等於j個,因為負值的天數可以小於j個


三、狀態轉移

第i天不使用金牌,表示要加上第i天的獲利v[i]。

dp[j][i] = dp[j][i-1]+v[i]

第i天使用金牌,表示要不考慮第i天的獲利v[i]。

dp[j][i] = dp[j-1][i-1]


dp[j][i] = max(dp[j-1][i-1], dp[j][i-1]+v[i]),由上到下由左到右填表,就可以獲得

dp[k]該列所有元素的最大值就是答案


初始化邊界(相當於K=0,最大子陣列DP解)

dp[0][0] = max(0,v[0])

dp[0][i] = max(dp[0][i-1],0)+v[i]


參考程式碼