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

bzoj4004

时间:2017-11-28 20:41:25      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:using   style   open   opera   个数   syn   技术分享   code   with   

线性基

构成线性基的个数是定的,所以我们对价值进行贪心就行了,根据拟阵那套理论,我们排个序,然后能塞进去就塞,这样就求出最小值了。

思维江化,只要是多维向量都能用线性基搞。

技术分享图片
#include<bits/stdc++.h>
using namespace std;
#define double long double
const double eps = 1e-5;
const int N = 1005;
int n, ans1, ans2, m;
int vis[N];
struct data {
    double p[N];
    int val;
    bool friend operator < (const data &a, const data &b) {
        return a.val < b.val;
    }
} a[N];
int main() 
{
    ios::sync_with_stdio(0);
    cin >> n >> m;
    for(int i = 1; i <= n; ++i)
        for(int j = 1; j <= m; ++j)
            cin >> a[i].p[j];
    for(int i = 1; i <= n; ++i) 
        cin >> a[i].val;
    sort(a + 1, a + n + 1);
    for(int i = 1; i <= n; ++i) 
        for(int j = 1; j <= m; ++j) 
        {
            if(!vis[j])
            {
                if(fabs(a[i].p[j]) > eps) 
                {
                    vis[j] = i;
                    ans1 += a[i].val;
                    ++ans2;
                    break;  
                }   
            } 
            else
            {
                double t = a[i].p[j] / a[vis[j]].p[j];
                for(int k = 1; k <= m; ++k) a[i].p[k] -= t * a[vis[j]].p[k];
            }
        }
    printf("%d %d\n", ans2, ans1);
    return 0;
}
View Code

 

bzoj4004

标签:using   style   open   opera   个数   syn   技术分享   code   with   

原文地址:http://www.cnblogs.com/19992147orz/p/7911816.html

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