複賽模擬試題 物品選取

2021-07-16 05:04:59 字數 1716 閱讀 1195

【問題描述】

小沐同學確信所有問題都有個多項式時間演算法,為了證明,他決定自己去當一次旅行商,在上路之前,小 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 0

1 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;

這道題是乙個超級加強揹包問題。這個問題要分3部分來思考(就是3種揹包分開想),然後問題就簡單了,重點就落在了第一種物品了,我這裡採取的方法是直接暴力列舉:第j大的那種,然後列舉j。

詳細**如下:

#include

#include

#include

#include

using namespace std;

const int maxn=105;

struct shu

a[maxn];

int n,m;

long long d[maxn][2005]=;

intread()

returnx;}

void init()

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

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

}}int main()

}if(a[i].id==2)

for(int j=m;j>=0;j--)

for(int k=0;k<=a[i].c&&k*a[i].b<=j;k++)

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

for(int j=0;j<=m;j++)

}coutreturn

0;}

複賽模擬試題 求和

問題描述 計算 1 b 2 b a b 的和除以 10000 的餘數 輸入格式 第一行乙個整數n,表示有n組測試資料 接下來n行,每行包含兩個正整數a和b。輸出格式 n行,對應輸入的答案 輸入樣例 1 2 3 輸出樣例 資料範圍 30 的資料滿足 1 n 10,a,b 1000 100 的資料滿足 ...

複賽模擬試題 河床

問題描述 地理學家們經常要對一段河流進行測量分析。他們從上游開始向下游方向等距離地選擇n n 30000 個點測量水位深度。得到一組資料a1,a2,an,回到實驗室後資料分析員根據需要對資料進行分析,發掘隱藏在資料背後的規律。最近,烏龍博士發現某種水文現象與河床地勢有關,於是他指示分析員要找出一段河...

HGOI 物品選取

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