题目:P2751 [USACO4.2]工序安排Job Processing
提交:记录详情
#include<bits/stdc++.h>
using namespace std;
const long long N=1e4;
long long a[N],b[N],t[N],tt[N],ans=0,n,m1,m2;
int main(){
cin>>n>>m1>>m2;
for(long long i=1;i<=m1;++i)scanf("%lld",&a[i]);
for(long long i=1;i<=m2;++i)scanf("%lld",&b[i]);
sort(a+1,a+1+m1),sort(b+1,b+1+m2);
for(long long i=1;i<=n;i++){
long long minn=INT_MAX,id=0;
for(long long j=1;j<=m1;j++)if(a[j]+t[j]<=minn)minn=a[j]+t[j],id=j;
t[id]+=a[id],tt[i]=t[id];
}
for(long long i=1;i<=m1;i++)ans=max(ans,t[i]);
printf("%lld ",ans),ans=0,memset(t,0,sizeof(t)),sort(tt+1,tt+1+n);
for(long long i=1;i<=n;i++){
long long minn=INT_MAX,id=0;
for(long long j=1;j<=m2;j++)if(b[j]+max(t[j],tt[i])<=minn)minn=b[j]+max(t[j],tt[i]),id=j;
t[id]=b[id]+max(t[id],tt[i]);
}
for(long long i=1;i<=m2;i++)ans=max(ans,t[i]);
printf("%lld ",ans);
return 0;
}