一道簡單的動態規劃

2022-08-09 21:03:22 字數 878 閱讀 2173

這是一道usaco的題,section 3.4 raucous rockets

如果只有1張唱片,就是乙個揹包問題,現在有m張唱片,怎麼辦呢?

dp[i][j][k]表示前i首歌曲在j個cd中最後乙個cd時間為k的最大值

如果這首歌不選,就是dp[i-1][j][k]

如果選,可以在當前時間就選,就是dp[i-1][j][k-a[i]]+1

也可以在以前選啊。。就是dp[i][j][k-1](如果k是0怎麼辦?那就用dp[i][j-1][t(t是時間最大值)]!)

這裡可以優化啊。。在現在的cd上又不馬上放的話還不如在當前就選。。所以就相當於在前面的cd上放。那我們就用dp[i][j-1][t];

我們就得到了遞推式dp[i][j][k] = max(dp[i-1][j][k],  dp[i-1][j][k-a[i]]+1,  dp[i][j][k-1]);

寫出**:

# include # include 

# include

using

namespace

std;

int dp[21][21][21],a[21

];int

main()

cout

return0;

}

還可以寫

# include # include 

# include

using

namespace

std;

int dp[21][21][21],a[21

];int

main()

cout

return0;

}

一道動態規劃水題的思考

最近感覺自己太菜了,想做一道水題找找自信,結果越發自卑qwq 洛谷p1002過河卒 這道題目的空間一維優化我居然看了半天才看懂 其實主要是那個作者沒有講清楚,讓我迷糊了半天,下面我來談談我對於這個狀態轉移方程的理解吧.對於沒有更新的狀態,它裡面存的值對應於二維陣列中 原作者的描述確實讓人看著有點迷q...

每天一道leetcode 打家劫舍(動態規劃)

198.打家劫舍 難度簡單839收藏分享切換為英文關注反饋 你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你不觸動...

一道動態規劃例題 杭電1024

問題描述 給定乙個長度為n的整數的陣列,現在讓你將整個陣列分成m段,並且這m段互不相交,在所有分段方式中能夠得到的這m段子陣列的最大的和是多少?解析 本題是一道適合用動態規劃方式解決的問題,首先定義兩個狀態 f i j g i j f i j 是將前i個元素分成j段並且包含第i元素的最大和 g i ...