【BZOJ4004】装备购买(线性基)
【BZOJ4004】裝備購買(線性基)
題面
BZOJ
洛谷
Description
臉哥最近在玩一款神奇的游戲,這個游戲里有 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 了。臉哥想要在買下最多數量的裝備的情況下花最少的錢,你能幫他算一下嗎?
Input
第一行兩個數 n;m。接下來 n 行,每行 m 個數,其中第 i 行描述裝備 i 的各項屬性值。接下來一行 n 個數,
其中 ci 表示購買第 i 件裝備的花費。
Output
一行兩個數,第一個數表示能夠購買的最多裝備數量,第二個數表示在購買最多數量的裝備的情況下的最小花費
Sample Input
3 3
1 2 3
3 4 5
2 3 4
1 1 2
Sample Output
2 2
HINT
如題目中描述,選擇裝備 1 裝備 2,裝備 1 裝備 3,裝備 2 裝備 3 均可,但選擇裝備 1 和裝備 2 的花費最小,為 2。對于 100% 的數據, 1 <= n;m <= 500; 0 <= aj <= 1000。
題解
很有道理的線性基,完全沒有想到還有這種用法
其實回憶一下異或線性基的使用方法
我們可以理解為是在解一個異或方程組
方法是類似與高斯消元。
那么,這里不再是異或方程組,就是一個普通的方程組
那么,可以類似于異或線性基的做法
如果有當前系數的方程已經在線性基中存在
那么,把當前方程的每一項系數都按照對應的倍數減一下(這不就是高斯消元?)
然后繼續向后面的位置檢查就行了。
如果一個方程組可以被另外的方程組給表示出來
那么,它在線性基中一定無法插入進去(是不是很類似于把一個數丟進異或線性基,跑出來如果是\(0\)就可以被其他的數的異或和所表示)
考慮怎么求解,就和異或線性基一樣的套路啦,
按照價格從小到達排序,能夠插進去就插進去,
最后統計一下答案就好啦
本題卡精度
轉載于:https://www.cnblogs.com/cjyyb/p/8798189.html
總結
以上是生活随笔為你收集整理的【BZOJ4004】装备购买(线性基)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2-51单片机ESP8266学习-AT指
- 下一篇: 020.2.2 runtime类