codevs5226 物品選取

2021-07-16 06:19:11 字數 2176 閱讀 2850

【問題描述】

小沐同學確信所有問題都有個多項式時間演算法,為了證明,他決定自己去當一次旅行商,在上路之前,小 x 需要挑選一些在路上使用的物品,但他只有乙個能裝體積為 m 的揹包。顯然,揹包問題對小沐來說過於簡單了,所以他希望你來幫他解決這個問題。

小沐可以選擇的物品有 n樣,一共分為甲乙丙三類:

1.甲類物品的價值隨著你分配給他的揹包體積變化,它的價值與分配給它的體積滿足函式關係式,v(x) = a*x^2-b*x,x表示分配給該物品的體積,為非負整數,a,b是每個甲類物品的兩個引數。注意每個體積的甲類物品只有乙個。

2.乙類物品的價值 a和體積 b都是固定的,但是每個乙類物品都有個引數c,表示這個物品可供選擇的個數。

3.丙類物品的價值 a和體積 b也是固定的,但是每個丙類物品可供選擇的個數都是無限多個。

你最終的任務是確定小沐的揹包最多能裝有多大的價值上路。

【輸入格式】

第一行兩個整數 n,m,表示揹包物品的個數和揹包的體積;

接下來 n行,每行描述乙個物品的資訊。第乙個整數 x,表示物品的種類:

若 x 為1表示甲類物品,接下來兩個整數 a,b,為a類物品的兩個引數;

若 x 為2表示乙類物品,接下來三個整數 a,b,c。a表示物品的價值,b表示它的體積,c 表示它的個數;

若 x 為3表示丙類物品,接下來兩個整數a,b。a表示它的價值,b表示它的體積。

【輸出格式】

僅一行為乙個整數,表示小 x的揹包能裝的最大價值。

【輸入樣例】

【樣例1】

1 01 1 1

【樣例2】

4 10

2 1 2 1

1 1 2

3 5 2

2 200 2 3

【輸出樣例】

【樣例1】

0【樣例2】

610

【資料範圍】

對於50%的資料,只有乙和丙兩類物品;

對於70%的資料,1<=n<=100, 1<=m<=500,0<=a,b,c<=200;

對於100%的資料,1<=n<=100, 1<=m<=2000,0<=a,b,c<=200;

題目大意:有三種物品,每種物品有著自己不同的屬性,現在求在最後裝載的總體積小於等於m的前提下,揹包內物品的最大價值。這類揹包問題關心的是"選不選"這個問題。是標準的0/1揹包。

演算法:動態規劃o(n*m^2)

設狀態函式f(j)表示在前i個物品中選擇一些裝入揹包,在揹包內物品體積和不超過j的前提下,揹包內物品價值的最大值。

先考慮較為簡單的乙類和丙類物品,對於乙類物品i,每一次都可以選0件,選1件...直到選min(a[i].c,j/a[i].b)件。對應狀態f(j-a[i].b)+a[i].a,f(j-2*a[i].b)+2*a[i].a...f(j-min(j/a[i].b,a[i].c)

而丙類物品和乙類物品類似,只是沒有a[i].c的限制。

現在考慮最難的甲類物品,甲類物品的價值隨著指定體積的大小而變化。而當前可指定給甲物品的體積為0(不放)、1......、j

對應狀態f(j)、f(j-1)+a*1^2+b*1、.......、f(0)+a*j^2+b*j。

在三類物品的所有狀態中,取乙個最大的價值,就是所求的f(i,j)

**實現時注意解這種物品種類和屬性較多的題,要注意分類處理,每考慮乙個物品,都應該取迴圈一次j。

最後的答案f(m)

邊界 f(0)=0(不能放任何物品)

#include#include#include#include#include#include#define maxn 105

#define maxm 2005

using namespace std;

typedef long long ll;

int n,m;

struct data

a[maxn];

ll f[maxm];

int main()

; }

if(x==2)

; }

if(x==3)

; }

} f[0]=0;

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

if(a[i].x==2)

if(a[i].x==3)

} cout<

xsy1144 選物品 主席樹

題目大意 n 件物品擺成一排,給每個物品定義兩個屬性 a 和 b 兩件物品的 差異度 定義為它們兩種屬性的差的絕對值中較大的乙個。如果要求出一些物品的差異度,我們先定義乙個 理想物品,使它與這些物品中每個物品的差異度的和最小,這些物品的差異度就是這個最小的和。給定 n 個物品和q組詢問,詢問從 l ...

codevs動態規劃 選菜

在小松宿舍樓下的不遠處,有pk大學最不錯的乙個食堂 the farmer s canteen nm食堂 由於該食堂的菜都很不錯,也公道,所以很多人都喜歡來這邊吃飯。the farmer s canteen的點菜方式如同在超市自選商品一樣,人們從乙個指定的路口進去,再從乙個指定的路口出來並付款。由於來...

CODE VS 1025 選菜 揹包

在小松宿舍樓下的不遠處,有pk大學最不錯的乙個食堂 the farmer s canteen nm食堂 由於該食堂的菜都很不錯,也公道,所以很多人都喜歡來這邊吃飯。the farmer s canteen的點菜方式如同在超市自選商品一樣,人們從乙個指定的路口進去,再從乙個指定的路口出來並付款。由於來...