标签:
总之就是线性基那一套贪心理论直接做就好了。
然而加强数据后很卡精度的样子。
于是重点在于这个特技:在整数模意义下搞。
#include<cstdio>
#include<algorithm>
#define N 505
using std::sort;
int k,l,m,n,p=1e9+7;
int s[N],t[N];
int a[N][N],*v[N];
int pow(int u,int v){
int a=1;
for(;v;v>>=1){
if(v&1)
a=1ll*a*u%p;
u=1ll*u*u%p;
}
return a;
}
bool ovo(int i,int j){
return s[i]<s[j];
}
bool add(int k){
for(int i=1;i<=m;++i){
if(!a[k][i])continue;
if(!v[i])
return v[i]=a[k];
else{
long long u=p-pow(
v[i][i],p-2)
*1ll*a[k][i]%p;
for(int j=m;j>=i;--j)
a[k][j]=(a[k]
[j]+u*v[i][j])%p;
}
}
return 0;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
scanf("%d",a[i]+j);
for(int i=1;i<=n;++i)
scanf("%d",s+i);
for(int i=1;i<=n;++i)
t[i]=i;
sort(t+1,t+n+1,ovo);
for(int i=1;i<=n;++i)
if(add(t[i]))
++k,l+=s[t[i]];
printf("%d %d\n",k,l);
}
标签:
原文地址:http://www.cnblogs.com/f321dd/p/5778479.html