資訊學奧賽一本通 1272:分組揹包(evd)
【題目描述】
一個旅行者有一個最多能裝V公斤的揹包,現在有n件物品,它們的重量分別是W1,W2,…,Wn,它們的價值分別為C1,C2,…,Cn。這些物品被劃分為若干組,每組中的物品互相沖突,最多選一件。求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。
【輸入】
第一行:三個整數,V(揹包容量,V≤200),N(物品數量,N≤30)和T(最大組號,T≤10);
第2…N+1行:每行三個整數Wi,Ci,P,表示每個物品的重量,價值,所屬組號。
【輸出】
僅一行,一個數,表示最大總價值。
【輸入樣例】
10 6 3
2 1 1
3 3 1
4 8 2
6 9 2
2 8 3
3 9 3
【輸出樣例】
20
【心得】本質上可以認為是01揹包,因為一個組裡只能選一個,由原來的選不選變為選哪個,決策變了而已!
【AC程式碼】
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[15][35],c[205],f[205],w[205];
int main()
{
int v,n,t,p;
cin>>v>>n>>t;
for(int i=1;i<=n;i++)
{
cin>>w[i]>>c[i]>>p;
a[p][++a[p][0]]=i;
}
for(int i=1;i<=t;i++)
{
for(int j=v;j>=0;j--)
{
for(int k=1;k<=a[i][0];k++)
{
if(w[a[i][k]]<=j)//裝不下就不要再裝了
{
f[j]=max(f[j],f[j-w[a[i][k]]]+c[a[i][k]]);
}
}
}
}
cout<<f[v];
return 0;
}
相關文章
- 資訊學奧賽一本通 1289:攔截導彈(evd)
- 資訊學奧賽一本通 1322:攔截導彈問題(evd)
- 資訊學奧賽一本通 1230:尋找平面上的極大點(evd)
- 資訊學奧賽一本通 1118:鋪地毯 視訊題解
- 資訊學奧賽一本通 1218:取石子游戲(NIM)
- 分組揹包、完全揹包
- 資訊學奧賽一本通 1032:大象喝水 | OpenJudge NOI 1.3 14
- 南沙C++信奧賽陳老師解一本通題 1270:【例9.14】混合揹包C++
- 資訊學奧賽一本通 1051:分段函式 | OpenJudge NOI 1.4 13函式
- 資訊學奧賽一本通1099:第n小的質數 視訊題解
- 資訊學奧賽一本通 1010:計算分數的浮點數值 | OpenJudge NOI 1.3 05
- 資訊學奧賽一本通 1027:輸出浮點數 | OpenJudge NOI 1.1 07
- 資訊學奧賽一本通 1012:計算多項式的值 | OpenJudge NOI 1.3 07
- 資訊學奧賽一本通 1035:等差數列末項計算 | OpenJudge NOI 1.3 18
- 【ACPC2013】馬里奧賽車(01揹包)
- 資訊學奧賽一本通 1029:計算浮點數相除的餘 | OpenJudge NOI 1.3 11
- 資訊學奧賽一本通 1016:整型資料型別儲存空間大小 | OpenJudge NOI 1.2 01資料型別
- 資訊學奧賽一本通 1018:其他資料型別儲存空間大小 | OpenJudge NOI 1.2 03資料型別
- 資訊學奧賽考點
- C++奧賽一本通貪心題解C++
- 一、資訊學奧賽簡介
- 信奧賽C++老師解一本通題: 1180:分數線劃定C++
- 通天之分組揹包
- 突破資訊學奧賽生天花板
- 信奧賽陳老師解一本通題: 1070:人口增長
- 資訊學奧賽--C語言筆記(一)C語言筆記
- 南沙C++信奧賽陳老師解一本通題 2099:【23CSPJ普及組】公路(road)C++
- 信奧賽一本通陳老師解題 1128:影像模糊處理
- 南沙C++信奧賽陳老師解一本通題 1950:【10NOIP普及組】接水問題C++
- 南沙C++信奧賽陳老師解一本通題 1984:【19CSPJ普及組】紀念品C++
- 南沙C++信奧賽陳老師解一本通題 1966:【14NOIP普及組】比例簡化C++
- 信奧一本通1164:digit函式Git函式
- 信奧一本通1403:素數對
- 51nod 1597 有限揹包計數問題 (揹包 分塊)
- 揹包問題(01揹包與完全揹包)
- 01揹包、完全揹包、多重揹包詳解
- 揹包DP——完全揹包
- 揹包DP——混合揹包