记录编号 |
94295 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[HAOI 2010]工厂选址 |
最终得分 |
100 |
用户昵称 |
digital-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;
}