Bzoj4004 JLOI2015 裝備購買

2022-05-13 15:27:16 字數 1735 閱讀 6208

time limit: 20 sec  memory limit: 128 mb

submit: 1092  solved: 359

臉哥最近在玩一款神奇的遊戲,這個遊戲裡有 n 件裝備,每件裝備有 m 個屬性,用向量zi(aj ,.....,am) 表示 

(1 <= i <= n; 1 <= j <= m),每個裝備需要花費 ci,現在臉哥想買一些裝備,但是臉哥很窮,所以總是盤算著

怎樣才能花盡量少的錢買盡量多的裝備。對於臉哥來說,如果一件裝備的屬效能用購買的其他裝備組合出(也就是

說臉哥可以利用手上的這些裝備組合出這件裝備的效果),那麼這件裝備就沒有買的必要了。嚴格的定義是,如果

臉哥買了 zi1,.....zip這 p 件裝備,那麼對於任意待決定的 zh,不存在 b1,....,bp 使得 b1zi1 + ... + bpzi

p = zh(b 是實數),那麼臉哥就會買 zh,否則 zh 對臉哥就是無用的了,自然不必購買。舉個例子,z1 =(1; 2;

3);z2 =(3; 4; 5);zh =(2; 3; 4),b1 =1/2,b2 =1/2,就有 b1z1 + b2z2 = zh,那麼如果臉哥買了 z1 和 z2 

就不會再買 zh 了。臉哥想要在買下最多數量的裝備的情況下花最少的錢,你能幫他算一下嗎?

第一行兩個數 n;m。接下來 n 行,每行 m 個數,其中第 i 行描述裝備 i 的各項屬性值。接下來一行 n 個數,

其中 ci 表示購買第 i 件裝備的花費。

一行兩個數,第乙個數表示能夠購買的最多裝備數量,第二個數表示在購買最多數量的裝備的情況下的最小花費

3 31 2 3

3 4 5

2 3 4

1 1 2

2 2如題目中描述,選擇裝備 1 裝備 2,裝備 1 裝備 3,裝備 2 裝備 3 均可,但選擇裝備 1 和裝備 2 的花費最小,為 2。對於 100% 的資料, 1 <= n;m <= 500; 0 <= aj <= 1000。

新加資料三組--2016.5.13

貪心 線性基 

按價值從小到大排序,動態維護線性基,貪心購買裝備

做題過程集齊曲折,嘗試了各種精度都過不了,刷了一片wa。看到discuss說資料卡精度,需要long double,換了以後果然a了。

但是網上那麼多題解明明沒有long double,不科學啊。

↑於是照著其他部落格裡的**改,感覺改到完全相同了還是wawawa。

↑開始質疑標程,難道是資料加強了?直接複製乙份ac**重交,wa了。啊……我的青春……

1 #include2 #include3 #include4 #include5 #include6

#define double long double

7using

namespace

std;

8const

double eps=1e-7;9

const

int mxn=510;10

struct

wp13

}a[mxn],p[mxn];

14int

n,m;

15int ans=0;16

bool

vis[mxn];

17void

solve()

30else35}

36}37 printf("

%d %d\n

",cnt,res);

38return;39

}40intmain()

BZOJ4004 JLOI2015 裝備購買

臉哥最近在玩一款神奇的遊戲,這個遊戲裡有 n 件裝備,每件裝備有 m 個屬性,用向量zi aj am 表示 1 i n 1 j m 每個裝備需要花費 ci,現在臉哥想買一些裝備,但是臉哥很窮,所以總是盤算著 怎樣才能花盡量少的錢買盡量多的裝備。對於臉哥來說,如果一件裝備的屬效能用購買的其他裝備組合出...

BZOJ 4004 JLOI2015 裝備購買

time limit 20 sec memory limit 128 mb submit 2027 solved 624 submit status discuss description 臉哥最近在玩一款神奇的遊戲,這個遊戲裡有 n 件裝備,每件裝備有 m 個屬性,用向量zi aj am 表示 1...

BZOJ4004 JLOI2015 裝備購買

bzoj luogu 給你 n 個 m 維向量,每個向量有乙個權值,求最小權極大線性無關組。按照權值排序從小到大插入就好了。這樣很好證明 若存在一組向量線性相關,那麼肯定是刪掉權值最大的那個向量最優。那麼按權值從小到大插入時只要發現當前待插入向量與原向量集線性相關就不插入。怎麼維護向量集?類似線性基...