zoukankan      html  css  js  c++  java
  • 【BZOJ4004】装备购买(JLOI2015)-线性基+贪心

    测试地址:装备购买
    做法:本题需要用到线性基+贪心。
    很容易看出,这题要求一个权值和最大的线性无关组,这次是真的原版线性基了,而不是异或线性基,所以为了保证精度,要开long double,而且写法也和异或线性基略有不同,详见代码。
    以下是本人代码:

    #include <bits/stdc++.h>
    using namespace std;
    int n,m,p[510];
    long double b[510][510]={0};
    const long double eps=1e-8;
    bool vis[510]={0};
    struct Vector
    {
        long double s[510];
        int c;
    }a[510];
    
    bool cmp(int x,int y)
    {
        return a[x].c<a[y].c;
    }
    
    void work()
    {
        int ans=0,tot=0;
        for(int t=1;t<=n;t++)
        {
            int i=p[t];
            for(int j=1;j<=m;j++)
                if (fabs(a[i].s[j])>eps)
                {
                    if (vis[j])
                    {
                        for(int k=j+1;k<=m;k++)
                            a[i].s[k]-=a[i].s[j]*b[j][k]/b[j][j];
                        a[i].s[j]=0.0;
                    }
                    else
                    {
                        vis[j]=1;
                        for(int k=1;k<=m;k++)
                            b[j][k]=a[i].s[k];
                        ans+=a[i].c;
                        tot++;
                        break;
                    }
                }
        }
        printf("%d %d",tot,ans);
    }
    
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                scanf("%Lf",&a[i].s[j]);
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i].c),p[i]=i;
        sort(p+1,p+n+1,cmp);
    
        work();
    
        return 0;
    }
  • 相关阅读:
    Bean生命周期
    Bean的作用域
    神经网络训练中,傻傻分不清Epoch、Batch Size和迭代
    jQuery中选择器有哪几种
    数据库的事务机制
    多线程面试题
    HTTP请求报文和HTTP响应报文
    linux tomcat单机部署多应用
    flexbox预习
    作业
  • 原文地址:https://www.cnblogs.com/Maxwei-wzj/p/9793495.html
Copyright © 2011-2022 走看看