• Evanyou Blog 彩带


      题目传送门

    装备购买

    格式难调,题面就不放了。


      分析:

      一句话,有$n$件物品,每件物品有$m$个属性和一个花费值,如果一个装备的属性值可以由其他装备的属性值改变系数后组合得到那就不买,求购买最多装备情况下的最小花费。

      这是一道实数线性基的模板,实数线性基和平常常见的二进制线性基区别不大,只是用到了高斯消元的思想来实现,具体还是看代码吧。

      Code:

    //It is made by HolseLee on 4th Oct 2018
    //Luogu.org P3265
    #include<cmath>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    const int N=507;
    const double eps=1e-4;
    int n,m,ans,cnt,p[N];
    struct Node {
        int cost; double x[N];
        bool operator < (const Node x) const {
            return cost < x.cost;
        }
    }a[N];
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin>>n>>m;
        for(int i=1; i<=n; ++i)
        for(int j=1; j<=m; ++j) 
            cin>>a[i].x[j];
        for(int i=1; i<=n; ++i)
            cin>>a[i].cost;
        sort(a+1,a+n+1);
        for(int i=1; i<=n; ++i)
        for(int j=1; j<=m; ++j) 
        if( fabs(a[i].x[j])>eps ){
            if( !p[j] ) {
                p[j]=i; cnt++; ans+=a[i].cost;
                break;
            } else {
                double t=a[i].x[j]/a[p[j]].x[j];
                for(int k=j; k<=m; ++k)
                    a[i].x[k]-=a[p[j]].x[k]*t;
            }
        }
        printf("%d %d
    ",cnt,ans);
        return 0;
    }
  • 相关阅读:
    结构体后面不加 ; 的后果。
    swap的两种错误写法
    rewind和fseek作用分析
    16个get函数的用法。
    枚举的简单使用。
    小知识点
    网线头的做法
    内存和寄存器
    linux下service mongod start启动报错
    appium上下文切换、webview调试以及chromedriver/键盘等报错问题解决
  • 原文地址:https://www.cnblogs.com/cytus/p/9742281.html
Copyright © 2020-2023  润新知