记录编号 94295 评测结果 AAAAAAAAAA
题目名称 [HAOI 2010]工厂选址 最终得分 100
用户昵称 Gravatardigital-T 是否通过 通过
代码语言 C++ 运行时间 1.079 s
提交时间 2014-03-31 15:29:57 内存使用 1.98 MiB
显示代码纯文本
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
int M,H,N;
int ans_num;
long long ans_sum;
long long B;
long long h[51];
long long a[50010];
long long c_0[50010];
struct bb
{
	long long a;
	long long to_0;
	long long to_j;
}c[50010];
bool cmp(bb x,bb y){return (x.to_0-x.to_j)<(y.to_0-y.to_j);}
int main()
{
	freopen("factory1.in","r",stdin);
	freopen("factory1.out","w",stdout);
	scanf("%d%lld%d%d",&M,&B,&H,&N);
	for(int i=1;i<=M;i++)//矿产量
		scanf("%lld",&a[i]);
	for(int i=1;i<=N;i++)//固定费用
		scanf("%lld",&h[i]);
	for(int i=1;i<=M;i++)//去老发电站费用
		scanf("%lld",&c_0[i]);
	for(int i=1;i<=N;i++)//50
	{
		long long sent_0=0,sent_j=0;
		for(int j=1;j<=M;j++)//50000
		{
			c[j].a=a[j];
			c[j].to_0=c_0[j];
			scanf("%lld",&c[j].to_j);
		}
		sort(c+1,c+M+1,cmp);
		int temp=0;
		for(int j=1;j<=M;j++)
		{
			temp+=c[j].a;
			if(temp-c[j].a<B && temp>B)
			{
				sent_0+=c[j].to_0*(c[j].a-(temp-B));
				sent_j+=c[j].to_j*(temp-B);
			}
			else
			{
				if(temp<=B)
				{
					sent_0+=c[j].to_0*c[j].a;
				}
				else
				{
					sent_j+=c[j].to_j*c[j].a;
				}
			}
		}
		if(i==1)
		{
			ans_num=1;
			ans_sum=sent_0+sent_j+h[1];
		}
		else
		{
			if(ans_sum>sent_0+sent_j+h[i])
			{
				ans_num=i;
				ans_sum=sent_0+sent_j+h[i];
			}
		}
	}
	printf("%d\n%lld",ans_num,ans_sum+H);
	return 0;
}