BZOJ 4004 装备购买

md有毒卡什么精度!!!!

最大线性无关组(线性基)可作为模板。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define eps 1e-5
#define maxn 550
#define double long double
using namespace std;
int n,m,ins[maxn],cnt=0,sum=0;
struct pnt
{
    double x[maxn];
    int c;
}p[maxn];
bool cmp(pnt x,pnt y)
{
    return x.c<y.c;
}
int main()
{
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;i++)
        for (int j=1;j<=m;j++)
            scanf("%Lf",&p[i].x[j]);
    for (int i=1;i<=n;i++)
        scanf("%d",&p[i].c);
    sort(p+1,p+n+1,cmp);
    for (int i=1;i<=n;i++)
        for (int j=1;j<=m;j++)
        {
            if (fabs(p[i].x[j])>eps)
            {
                if (ins[j])
                {
                    double r=p[i].x[j]/p[ins[j]].x[j];
                    for (int k=j;k<=m;k++)
                        p[i].x[k]-=p[ins[j]].x[k]*r;
                }
                else
                {
                    cnt++;sum+=p[i].c;
                    ins[j]=i;break;
                }
            }
        }
    printf("%d %d\n",cnt,sum);
    return 0;
}
时间: 2024-10-12 19:32:06

BZOJ 4004 装备购买的相关文章

bzoj 4004: [JLOI2015]装备购买 拟阵 &amp;&amp; 高消

4004: [JLOI2015]装备购买 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 337  Solved: 139[Submit][Status][Discuss] Description 脸 哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量zi(aj ,.....,am) 表示 (1 <= i <= n; 1 <= j <= m),每个装备需要花费 ci,现在脸哥想买一些装备,但是脸哥很穷,

BZOJ 4004: [JLOI2015]装备购买

4004: [JLOI2015]装备购买 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1158  Solved: 377[Submit][Status][Discuss] Description 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量zi(aj ,.....,am) 表示 (1 <= i <= n; 1 <= j <= m),每个装备需要花费 ci,现在脸哥想买一些装备,但是脸哥很穷,

【BZOJ】【4004】【JLOI2015】装备购买

拟阵/贪心 题解戳这里:http://blog.csdn.net/popoqqq/article/details/45148309 思路: 裸拟阵…… 维护线性基,将武器按价格排序,从小到大塞进去,如果能塞进去就买,塞不进去就不买 精度问题?卡了10pts 其他人最高30分…… 这是裸题啊…… 一开始eps=1e-8,WA 60了,改成1e-5 AC…… 可能是double的精度有效位数的原因? 1 /***********************************************

【BZOJ4004】[JLOI2015]装备购买 贪心+高斯消元

[BZOJ4004][JLOI2015]装备购买 Description 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量zi(aj ,.....,am) 表示 (1 <= i <= n; 1 <= j <= m),每个装备需要花费 ci,现在脸哥想买一些装备,但是脸哥很穷,所以总是盘算着怎样才能花尽量少的钱买尽量多的装备.对于脸哥来说,如果一件装备的属性能用购买的其他装备组合出(也就是说脸哥可以利用手上的这些装备组合出这件装备的效果),那么这件

[JLOI2015]装备购买(线性基)

[JLOI2015]装备购买 题目描述 脸哥最近在玩一款神奇的游戏,这个游戏里有 nn 件装备,每件装备有 \(m\) 个属性,用向量 \(\mathbf{z_i}\)=\((a_1, \ldots ,a_j, \ldots , a_m)\) 表示 \(1 \leq i \leq n\), \(1 \leq j \leq m\),每个装备需要花费 \(c_i\) ,现在脸哥想买一些装备,但是脸哥很穷,所以总是盘算着怎样才能花尽量少的钱买尽量多的装备.对于脸哥来说,如果一件装备的属性能用购买的其他

[JLOI2015]装备购买 (高斯消元)

[JLOI2015]装备购买 \(solution:\) 首先这道题的题面已经非常清晰的告诉我们这就是线性空间高斯消元的一道题(可以用某些装备来表示另一件装备,这已经不能再明显了),只是这道题要求我们求出花费最小的方案,这个我们可以直接贪心,如果有多个装备可以匹配某一个属性,那么我们选价值最小的那一个(这个可以用线性空间的定义证明),价值大的尽量往后再选(选到最后剩下一些价格大的不买即可) \(code:\) #include<iostream> #include<cstdio>

题解 P3265 【[JLOI2015]装备购买】

这题xswl,我把\(m\)打成\(n\)得了\(90\),一看数据-- Solution [JLOI2015]装备购买 题目大意:给定\(n\)个装备,每个装备属性是一个长为\(m\)的向量,有一个价格,你购买的装备属性必须是线性无关的,求最大可购买的装备数,以及此前提下的最小价格和 线性基,高斯消元 我们把所有装备的属性排成一个矩阵,那么我们可以购买的最大的装备数量就是这个矩阵的秩 然后这个东西就可以高斯消元来做了,普通的高斯消元对于每个主元\(x_i\),选取前\(i-1\)列为\(0\)

BZOJ 4004 [JLOI 2015] 装备购买 解题报告

哎这个题 WA 了无数遍...果然人太弱... 首先我们把这些装备按照花费从小到大排序,然后依次考虑是否能买这个装备. 至于这样为什么是对的,好像有一个叫拟阵的东西可以证明,然而我不会.TATQAQ 至于怎么考虑是否能买这个装备呢,我们可以动态更新线性基,具体操作: 对当前向量进行高斯消元,注意要从从高位往低位消. 如果消元完毕后当前向量变成了 $0$ 向量,那么我们就可以用之前的装备凑出当前装备,否则就不能凑出来. 每次更新线性基需要 $O(m^2)$ 的时间,要更新 $O(n)$ 次. 时间

BZOJ 4004: [JLOI2015]装备购买 [高斯消元同余 线性基]

和前两(一)题一样,不过不是异或方程组了..... 然后bzoj的新数据是用来卡精度的吧..... 所有只好在模意义下做啦 只是巨慢无比 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <bitset> using namespace std; typedef long lon