2 条题解
- 
  1
#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; } - 
  -2
#include #include #include #include #include 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
 - 标签
 - 递交数
 - 10
 - 已通过
 - 9
 - 上传者