分組揹包專題

2021-10-03 21:25:12 字數 2897 閱讀 8392

題目背景:物品被分為多組,每組只能選乙個

解決方法:詳見下方**

題解分組揹包板子

**

#include

#define m 109

using

namespace std;

intread()

for(

;isdigit

(ch)

;ch=

getchar()

) re=

(re<<3)

+(re<<1)

+ch-

'0';

return re*f;

}int n,m,f[m]

,a[m]

[m];

intmain()

return0;

}

題解

嚴格意義來說,本題不屬於分組揹包,它並沒有每組只能選乙個的限制,相反它的限制是每組至少選乙個,那麼其實直接寫成:

f [i

][j]

=max

(f[i

][j]

,f[i

][j−

w[i]

[k]]

+a[i

][k]

,f[i

−1][

j−w[

i][k

]]+a

[i][

k]

f[i][j]=max(f[i][j],f[i][j-w[i][k]]+a[i][k],f[i-1][j-w[i][k]]+a[i][k]

f[i][j

]=ma

x(f[

i][j

],f[

i][j

−w[i

][k]

]+a[

i][k

],f[

i−1]

[j−w

[i][

k]]+

a[i]

[k]f[i

][j]

f[i][j]

f[i][j

]表示前i

ii組物品花了j

jj容量得到的最大價值

w [i

][k]

w[i][k]

w[i][k

]表示第i

ii組中第k

kk件物品的重量

v [i

][k]

v[i][k]

v[i][k

]表示第i

ii組中第k

kk件物品的價值

同時注意初始化,因為除了起始狀態,其餘狀態都為不合法狀態

**

#include

#define m 100009

using

namespace std;

intread()

for(

;isdigit

(ch)

;ch=

getchar()

) re=

(re<<3)

+(re<<1)

+ch-

'0';

return re*f;

}int f[12]

[m],a[12]

[m],n,m,tot[12]

,k,b[12]

[m],w;

intmain()

memset

(f,-1,

sizeof

(f))

;for

(int i=

1;i<=m;i++

) f[0]

[i]=0;

for(

int i=

1;i<=w;i++

)for

(int k=

1;k<=tot[i]

;k++

)for

(int j=m;j>=

0;j--)if

(f[w]

[m]<0)

printf

("impossible\n");

else

printf

("%d\n"

,f[w]

[m]);}

return0;

}

題解

分組揹包板子

**

#include

using

namespace std;

intread()

for(

;isdigit

(ch)

;ch=

getchar()

) re=

(re<<3)

+(re<<1)

+ch-

'0';

return re*f;

}int m,n,w[

109]

[1009

],f[

50009

],v[

109]

[1009

],tot[

109]

,k;int

main()

for(

int i=

1;i<=k;i++

)for

(int k=m;k>=

0;k--

)for

(int j=

1;j<=tot[i]

;j++)if

(k>=w[i]

[j]) f[k]

=max

(f[k]

,f[k-w[i]

[j]]

+v[i]

[j])

;printf

("%d\n"

,f[m]);

return0;

}

九大揹包問題專題 分組揹包問題

問題 有n組物品和乙個容量是v的揹包。第組物品有若干個,同一組內的物品最多只能選乙個每件物品的體積是vij,價值是wij。其中i是組號,j是組內編號。求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包的容量,且價值總和最大。輸出最大價值 輸入格式 第一行有兩個整數,n,v用空格隔開,分別表示物品...

通天之分組揹包 分組揹包

本人水平有限,題解不到為處,請多多諒解 本蒟蒻謝謝大家 題目 傳送門 分組揹包的模板 偽 1 for int i 1 i 組數 i 6 7 直接套模板即可。code 1 include2 pragma gcc optimize 3 3const int n 1e5 10 4 using namesp...

揹包專題 01揹包

暑假集訓開始了,按照隊裡的分配,我是弄dp的,嘛,於是我又一次的開始了從01揹包開始學習,昨天將杭電的幾道01揹包重新做了一遍,下面講講我自己對於01揹包的理解。首先01揹包題目的雛形是 有n件物品和乙個容量為v的揹包。第i件物品的費用是c i 價值是w i 求解將哪些物品裝入揹包可使價值總和最大。...