2 条题解

  • 0
    @ 2024-4-1 16:37:22
    #include<bits/stdc++.h>
    #define maxn 100005
    #define mod 1000000007
    #define eps 1e-8
    using namespace std;
    typedef long long ll;
    ll n,m;
    long double a[505][505];
    long double c[505];
    int main(){
        cin>>n>>m;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                double temp;
                cin>>temp;
                a[i][j]=temp;
            }
        }
        for(int i=1;i<=n;i++){
            double temp;
            cin>>temp;
            c[i]=temp;
        }
        double sum=0;
        ll num=0;
        for(int i=1;i<=n;i++){
            int flag=0;
            for(int j=i;j<=n;j++){
                if(fabs(a[j][i])>eps){
                    if(flag==0||c[j]<c[flag])
                    {
                        flag=j;
                    } 
                }
            } 
            /*if(fabs(a[i][i])<eps){
                num=i-1;
                break;
            }*/
            if(flag==0) continue;
            num++;    
            for(int k=1;k<=m;k++){
                swap(a[i][k],a[flag][k]);        
            }
            swap(c[i],c[flag]);
            sum+=c[i];
            for(int j=1;j<=n;j++){
                if(i==j||fabs(a[j][i])<eps) continue;
                long double state=a[j][i]/a[i][i];
                for(int k=1;k<=m;k++){
                    a[j][k]-=a[i][k]*state;
                }
            }
        } 
        cout<<num<<" "<<sum;
    }
    
    • -1
      @ 2023-9-29 14:58:27

      #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<iostream> using namespace std; const double eps=1e-5; int p[1001],n,m,ans,sum; struct node{ int vi; double x[1001]; }a[1001];

      bool cmp(node a,node b){ return a.vi<b.vi; }

      void solve() { 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; sum++; ans+=a[i].vi; break; } else { double t=(double)(1.0a[i].x[j])/(1.0a[p[j]].x[j]); for(int k=j;k<=m;k++){ a[i].x[k]-=t*(a[p[j]].x[k]); } } } } } printf("%d %d",sum,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].x[j]); for(int i=1;i<=n;i++) scanf("%d",&a[i].vi); sort(a+1,a+n+1,cmp); solve(); return 0; }[](https://)

      • 1

      信息

      ID
      120
      时间
      1000ms
      内存
      128MiB
      难度
      9
      标签
      递交数
      8
      已通过
      7
      上传者