bzoj 4004 裝備購買(線性基)

2021-09-25 08:08:35 字數 1264 閱讀 6459

反思:犯了乙個錯誤,學了高斯消元後想在高斯消元的過程中得到解,但在高斯消元的過程中貪心並不是正解,似乎會影響到後面的決策使得總花費不是最優。這題要用線性基,線性基求基的過程是列舉每乙個向量,看這個向量能加到哪一行,如果當前行向量已存在那麼對這個向量進行初等變換使得向量該位置為0,這樣會保證線性基的每乙個向量的最左端不為0的位置不同,最終加進去的各個向量線性無關。(學過線性代數會發現這就是模擬求矩陣的秩的過程,每次加入乙個和已經得到的向量組線性無關的向量來得到乙個更大的線性無關向量組,最終加不可加時就得到了極大線性無關向量組)

花費最小:考慮貪心,將向量按**從小到大排序。總是先將**最低的向量加入到線性無關向量組中,設某一行加入的向量並不是當前花費最小的向量,那麼用這個花費最小的向量代替所選擇的這個向量仍然可以構成乙個線性基,它們的線性空間相同,而總花費更小。

關於精度問題:這題卡了精度,eps開到幾都沒用,查了一下黑科技就是使用求模意義下的指,只要模數夠大就不會影響答案。這題可以用109

+710^9 + 7

109+

7作為模數。

#include

using

namespace std;

const

int maxn =

5e2+10;

const

int mod =

1e9+7;

typedef

long

long ll;

int n,m;

ll a[maxn]

[maxn]

;int p[maxn]

,c[maxn]

,b[maxn]

;bool

cmp(

int a,

int b)

ll fpow

(ll a,ll b)

return r;

}int

main()

sort

(p +

1,p + n +

1,cmp)

;int ans =

0,res =0;

for(

int i =

1; i <= n; i++

)else}}

}printf

("%d %d\n"

,res,ans)

;return0;

}

BZOJ 4004 裝備購買(貪心 線性基)

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

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...