记录编号 |
330716 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[HAOI 2010]工厂选址 |
最终得分 |
100 |
用户昵称 |
FoolMike |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
1.107 s |
提交时间 |
2016-10-26 20:02:16 |
内存使用 |
12.50 MiB |
显示代码纯文本
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=60,M=50010;
int m,b,H,n,p,a[M],h[M],c[M][N];
inline int read(){
int x=0;char ch=getchar();
while (ch>'9'||ch<'0') ch=getchar();
while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
return x;
}
ll ans;int d[M],P[M];
bool cmp(const int x,const int y){
return d[x]<d[y];
}
ll solve(int x){//我们假定全部的煤运到x,剩下的贪心
ll ans=h[x];
for (int i=1;i<=m;i++){
ans+=a[i]*c[i][x];
d[i]=c[i][0]-c[i][x];
P[i]=i;
}
sort(P+1,P+m+1,cmp);
int now=b;
for (int i=1;i<=m;i++)
if (now>0){
int j=P[i];
if (now>=a[j]) ans+=a[j]*d[j],now-=a[j];
else ans+=now*d[j],now=0;
}
return ans;
}
int main()
{
freopen("factory1.in","r",stdin);
freopen("factory1.out","w",stdout);
m=read();b=read();H=read();n=read();
for (int i=1;i<=m;i++) a[i]=read();
for (int i=1;i<=n;i++) h[i]=read();
for (int i=0;i<=n;i++)
for (int j=1;j<=m;j++) c[j][i]=read();
ll ans=1e16;
for (int i=1;i<=n;i++){
ll j=solve(i);
if (ans>j) ans=j,p=i;
}
printf("%d\n%lld\n",p,ans+H);
return 0;
}