Uva-11389-The Bus Driver Problem

来源:互联网 发布:沈阳纳森网络照片 编辑:程序博客网 时间:2024/05/18 17:04

这个题算很水的一个贪心题吧,题目大意是说有n个司机,有n个下午路线和n个夜间路线,现在要求你给司机进行安排白天和晚上的工作(每个下午路线和夜间路线可能不同),若司机白天加上夜晚的工作量大于d,则需要支付超过部分乘以r的加班费用,现在要求你安排使得没跳路线恰好被分配到一个司机,并且使得需要支付的加班费用最少。

解法:排序,白天从大值去,夜间从小值取进行计算即可。

代码:

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int maxn=10001;int n,d,r,a[maxn],b[maxn];int main(){    while(scanf("%d%d%d",&n,&d,&r)&&n)    {for(int i=0;i<n;i++)    scanf("%d",&a[i]);for(int i=0;i<n;i++)    scanf("%d",&b[i]);sort(a,a+n);sort(b,b+n);int ans=0;for(int i=0;i<n;i++){    if(a[i]+b[n-1-i]>d)ans+=(a[i]+b[n-1-i]-d)*r;}printf("%d\n",ans);    }    return 0;}


原创粉丝点击