惡補一下DP 揹包專題 刷刷水題 L2

2022-08-05 14:18:17 字數 2119 閱讀 2138

開心的金明

題目大意

就是求一定揹包容量的最大值

思路想必大家都知道,一看到這種題目,就會想起01揹包

雖然特別簡單但是還是講一下吧

狀態設定

由於這題差不多是乙個01揹包的版子題,那麼我們就只需要乙個一維的陣列去記錄狀態

f[i]中i代表的是揹包容量,而f[i]的值則代表該容量下的最大值

轉移方程

f[i]=max(f[i],f[i-揹包容量]+揹包價值)

輸出輸出的話我們就只需要輸出f[揹包容量]就可以啦

這個簡單的dp題就講完啦

**在這裡

小a點菜

題目大意

就是要求花光所有錢的方案數

思路最開始我還不懂,發現題解的說法好有道理

我們設定乙個二維陣列來統計選到第i種物品花j的錢的方案數

最後我們就只要輸出選到第n種物品話光全部錢的方案數

狀態設定

f[i][j]中i代表現在選到第幾種物品,j代表花的錢數

轉移方程

1.如果我們列舉的錢數大於菜的**即(j>a[i])

f[i][j]=f[i-1][j]+f[i-1][j-a[i]];//這2個式子相加分別代表不選這種物品和選這種物品,但是**不變的方案數

2.如果我們列舉的錢數等於菜的**即(j==a[i])

f[i][j]=f[i-1][j]+1//這2個值相加代表不選這種物品和選的方案數,由於我們不方便將f[i][0]定義為1,所以這裡就特判處理一下(是這麼理解的吧...)

3.如果小於

f[i][j]=f[i-1][j]//直接轉移過來就可以啦

輸出直接輸出f[n][m]

#includeusing

namespace

std;

intn,m;

int a[1005

];int f[110][10010

];int scan()//

快讀撒

returnas;

}int

main()

for(int i=1;i<=n;i++)//

在這裡面,i就像乙個分層,所以我們沒有必要倒著來

}cout

<

return0;

}/*思路:這題的話最開始有點蒙

現在來理一下思路

1.我們設定狀態f[i][j],i是前i中,j是前,值為種數

2.f[i][j]=f[i-1][j]+f[i-1][j-a[i]];//這種轉移只是乙個向前走的過程

f[i][j]=f[i-1][j]+1;//這種是方案新增

f[i][j]=f[i-1][j];//相當於不選擇這種商品

大概是這樣子吧

.........

dp還是要多練一練啊

*/

**在這裡

金明的**

讓我拖一會,先把簡單題寫完233333

瘋狂的採藥

題目描述

這個題目實質上就是乙個求完全揹包的問題

思路我們就設定乙個一維陣列來記錄相應容量的最大值

狀態設定

f[i]中i代表容量,f[i]是該容量的值

轉移方程

由於這個不是01揹包,而是完全揹包,所以我們列舉時要正著列舉,而不是像01揹包一樣倒著列舉

f[i]=max(f[i],f[i-a[i]]);

輸出直接輸出f[m]就可以了...

#includeusing

namespace

std;

intt,n;

int f[100010]=;

struct

ssa[

10010

];int

scan()

return f*as;}

intmain()

for(int i=1;i<=n;i++)

}cout

<

return0;

}/*思路:我們只需要開乙個一維陣列,來表示揹包的容量,

然後我們只需要在01揹包的基礎上將容量從小列舉到大

*/

**在這裡

DP 揹包專題 揹包九講

這段時間看了 揹包九講 在hust vjudge上找到了乙個題單,挑選了其中16道題集中做了下,選題全部是hdu上的題,大多是簡單題。目前做了點小總結,大概提了下每道題的思路重點部分,希望以後回看回想時能有幫助。題單 hdu 1059 hdu 1114 hdu 1171 hdu 1203 hdu 1...

dp專題 簡單基礎dp 揹包

按照這個做的 hdu 1864 最大報銷額 01揹包 方法一 double型別的揹包 總數30個 每個最大1000 保留2位有效位。直接把double 100轉換為int型的揹包 看清題目 double型的01揹包 include include include using namespace st...

DP經典例題 揹包專題

揹包的基本模型 給你乙個容量為v的揹包和若干種物品,在一定的限制條件下 每種物品都占用一定容量 問最多能放進多少價值的物品?題意 有n個重量和價值分別為wi,vi,從這些物品中挑選總重量不超過w的物品,使其價值最大,輸出價值最大值 其中每個物品最多只能放一件 這題其實用dfs也可以做,但超時 確認子...