记录编号 |
243176 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[UVa 10498] 满意值 |
最终得分 |
100 |
用户昵称 |
/k |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.003 s |
提交时间 |
2016-03-29 15:55:09 |
内存使用 |
0.32 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cmath>
#define eps 1e-10
double A[21][21],w[21],B[21],RE;
int n,m;
inline void gzzhou(int l,int e)
{
B[l]/=A[l][e];
for(int i=1;i<=n;i++)
if(i!=e)
A[l][i]/=A[l][e];
A[l][e]=1.0/A[l][e];
for(int i=1;i<=m;i++)
if(i!=l&&fabs(A[i][e])>eps)
{
for(int j=1;j<=n;++j)
if(j!=e)
A[i][j]-=A[l][j]*A[i][e];
B[i]-=B[l]*A[i][e];
A[i][e]=-A[i][e]*A[l][e];
}
RE+=B[l]*w[e];
for(int i=1;i<=n;i++)
if(i!=e)
w[i]-=w[e]*A[l][i];
w[e]=-w[e]*A[l][e];
}
inline double gdcx()
{
while(1)
{
int e;
for(e=1;e<=n;e++)
if(w[e]>eps)
break;
if(e>n)
return RE;
double MA=100000000.0;
int l=-1;
for(int i=1;i<=m;i++)//找到最紧的约束
if(A[i][e]>eps&&MA>B[i]/A[i][e])
{
MA=B[i]/A[i][e];
l=i;
}
if(l==-1)
return MA;
gzzhou(l,e);
}
}
int main()
{
freopen("happiness.in","r",stdin);
freopen("happiness.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%lf",&w[i]);
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
scanf("%lf",&A[i][j]);
scanf("%lf",&B[i]);
}
double pr=gdcx();
pr*=m;
printf("Nasa can spend %d taka.",(int)ceil(pr));
getchar();
getchar();
}