题意
脸哥最近在玩一款神奇的游戏,这个游戏里有 n n n 件装备,每件装备有 m m m 个属性,用向量 z i = ( a 1 , … , a j , … , a m ) \mathbf{z_i}=(a_1, \ldots ,a_j, \ldots , a_m) zi=(a1,…,aj,…,am) 表示 ( 1 ≤ i ≤ n , 1 ≤ j ≤ m 1 \leq i \leq n, \ 1 \leq j \leq m 1≤i≤n, 1≤j≤m),每个装备需要花费 c i c_i ci,现在脸哥想买一些装备,但是脸哥很穷,所以总是盘算着怎样才能花尽量少的钱买尽量多的装备。对于脸哥来说,如果一件装备的属性能用购买的其他装备组合出(也就是说脸哥可以利用手上的这些装备组合出这件装备的效果),那么这件装备就没有买的必要了。
严格的定义是,如果脸哥买了 z i 1 , … , z i p \mathbf{z_{i_1}}, \ldots , \mathbf{z_{i_p}} zi1,…,zip 这 p p p 件装备,那么对于任意待决定的 z h \mathbf{z_h} zh,不存在 b 1 , … , b p b_1, \ldots ,b_p b1,…,bp 使得 b 1 z i 1 + … + b p z i p = z h b_1\mathbf{z_{i_1}} + \ldots + b_p\mathbf{z_{i_p}} = \mathbf{z_h} b1zi1+…+bpzip=zh( b i b_i bi 均是实数),那么脸哥就会买 z h \mathbf{z_h} zh,否则 z h \mathbf{z_h} zh 对脸哥就是无用的了,自然不必购买。
举个例子, z 1 = ( 1 , 2 , 3 ) , z 2 = ( 3 , 4 , 5 ) , z h = ( 2 , 3 , 4 ) , b 1 = 1 2 , b 2 = 1 2 \mathbf{z_1}=(1, 2, 3), \ \mathbf{z_2}=(3, 4, 5), \ \mathbf{z_h}=(2, 3, 4), \ b_1 =\frac{1}{2}, \ b_2 =\frac{1}{2} z1=(1,2,3), z2=(3,4,5), zh=(2,3,4), b1=21, b2=21,就有 b 1 z 1 + b 2 z 2 = z h b_1\mathbf{z_1} + b_2\mathbf{z_2} = \mathbf{z_h} b1z1+b2z2=zh,那么如果脸哥买了 z 1 \mathbf{z_1} z1 和 z 2 \mathbf{z_2} z2 就不会再买 z h \mathbf{z_h} zh 了。
脸哥想要在买下最多数量的装备的情况下花最少的钱,你能帮他算一下吗?
对于 100 % 100 \% 100% 的数据, 1 ≤ n , m ≤ 500 ; 0 ≤ a j ≤ 1000 1 \leq n,m \leq 500; 0 \leq a_j \leq 1000 1≤n,m≤500;0≤aj≤1000。
题解
考虑贪心,从小往大取,为了满足题目限制,每取一个,就选特定的一维x,把后面的每一个装备的第x维消为0,这样一个装备只要不是每维都是0就可取。
考虑这样为什么是最优的,发现当一个装备能被一些本来不能互相表示的装备表示出来时,把这个装备替换掉原来的任何一个装备都是可行的,因此在个数最大的意义下每个装备都是等价的,从小往大取就是装备数量最多的前提下,费用最小的。