码迷,mamicode.com
首页 > 其他好文 > 详细

bzoj4004 [JLOI2015]装备购买

时间:2017-04-25 19:12:58      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:线性   algorithm   bzoj   long   pre   装备   lin   sign   价格   

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4004

【题解】

这种题目怎么这么眼熟呢?似乎这样的都能贪心。

按照物品价格从小到大排序,然后贪心插入。

插入的时候消元即可(线性基思想)

卡精度啊qwq

技术分享
# include <math.h>
# include <stdio.h>
# include <string.h>
# include <algorithm>
// # include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
const int M = 5e2 + 10;
const int mod = 1e9+7;

# define RG register
# define ST static

int n, m;

struct pa {
    ld a[M];
    int v;
    friend bool operator<(pa a, pa b) {
        return a.v<b.v;
    }
}p[M]; 

int cur[M]; 
int u, ans;

int main() {
    scanf("%d%d", &n, &m);
    for (int i=1; i<=n; ++i) 
        for (int j=1; j<=m; ++j) {
            int t; scanf("%d", &t);
            p[i].a[j] = (ld)t;
        }
    for (int i=1; i<=n; ++i) scanf("%d", &p[i].v); 
    sort(p+1, p+n+1); 
    for (int i=1; i<=n; ++i) {
        for (int j=1; j<=m; ++j) {
            if(fabs(p[i].a[j]) < 1e-8) continue; 
            if(cur[j]) {
                ld r = p[i].a[j]/p[cur[j]].a[j];
                for (int k=j; k<=m; ++k) p[i].a[k] -= r*p[cur[j]].a[k];
            } else {cur[j] = i; ans += p[i].v; ++u;break;} 
        }
    }
    printf("%d %d\n", u, ans); 
    return 0;
}
View Code

 

bzoj4004 [JLOI2015]装备购买

标签:线性   algorithm   bzoj   long   pre   装备   lin   sign   价格   

原文地址:http://www.cnblogs.com/galaxies/p/bzoj4004.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!