记录编号 243176 评测结果 AAAAAAAAAA
题目名称 [UVa 10498] 满意值 最终得分 100
用户昵称 Gravatar/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();
}