哈理工练习赛 UVALive 5089 B - Assignments(水题)

B - Assignments
Time Limit:3000MS    Memory Limit:0KB    64bit IO Format:%lld & %llu

Description

Download as PDF

In a factory, there are N workers to finish two types of tasks (A and B). Each type has N tasks. Each task of type A needs xi time to finish, and each task of type B needs yj time to finish, now, you, as the boss of the factory, need to make an assignment, which makes sure that every worker could get two tasks, one in type A and one in type B, and, what's more, every worker should have task to work with and every task has to be assigned. However, you need to pay extra money to workers who work over the standard working hours, according to the company's rule. The calculation method is described as follow: if someone' working hour t is more than the standard working hour T, you should pay t - T to him. As a thrifty boss, you want know the minimum total of overtime pay.

Input

There are multiple test cases, in each test case there are 3 lines. First line there are two positive Integers, N(N$ \le$1000) and T(T$ \le$1000), indicating N workers, N task-A and N task-B, standard working hour T. Each of the next two lines has N positive Integers; the first line indicates the needed time for task A1, A2...An(Ai$ \le$1000), and the second line is for B1, B2...Bn(Bi$ \le$1000).

Output

For each test case output the minimum Overtime wages by an integer in one line.

Sample Input

2 5 
4 2 
3 5

Sample Output

4
题意:
有两种类型的任务类型A和类型B,每种有n个任务, 有n个人, 每个人负责A组、B组任务各一个,每个人有个特殊属性那就是每个人有一个标准工作时间,一旦完成工作时超过
标准工作时间,老板就得付出额外的员工工资(超出的时间),问通过合理安排每个员工的任务后所能让吝啬的老板少开儿点工资。
思路:
一开始感觉像二分图。 这个题目刚开始以为是二分最小权匹配,后来发现并不对,虽然能够找出最佳搭配值,但是无法求出超额时间。其实最佳匹配的话完全可以将AB两组任务
所需时间互反排序,让最小的和最大的任务组合在一块儿才有可能尽量把每个人的工作量“调匀”,这样的话都没有闲着,也可能很少人累着,就是说让尽量少的人,在没有
达到标准时间就搞定任务休息了,并让尽量少的人没有那么高的工作量,都协调一下,这样看起来老板当然合理利用了员工吧!  (这样可能好理解哈)
AC:
/*=============================================================================
#
#      Author: liangshu - cbam 
#
#      QQ : 756029571 
#
#      School : 哈尔滨理工大学 
#
#      Last modified: 2015-09-06 14:55
#
#     Filename: hdu1015.cpp
#
#     Description: 
#        The people who are crazy enough to think they can change the world, are the ones who do ! 
=============================================================================*/
#
#include<iostream>
#include<sstream>
#include<algorithm>
#include<cstdio>
#include<string.h>
#include<cctype>
#include<string>
#include<cmath>
#include<vector>
#include<stack>
#include<queue>
#include<map>
#include<set>
using namespace std;
int n, t;
int main()
{
    while(cin>>n>>t){
        vector<int>cnt[2];
        for(int i = 0;i < n ; i++){
                int x;
        cin>>x;
            cnt[0].push_back(x);
        }
        for(int j = 0; j < n; j++){
            int x;
            cin>>x;
            cnt[1].push_back(x);
        }
        sort(cnt[0].begin(),cnt[0].end());
        sort(cnt[1].begin(),cnt[1].end());
         int sum = 0;
        for(int i =0; i < n;i++){
            if(cnt[0][i] + cnt[1][n - i - 1] > t){
              sum += cnt[0][i] + cnt[1][n - i - 1] - t;
            }
        }
        cout<<sum <<endl;
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值