【策略】UVa 11389 - The Bus Driver Problem
题意:
有司机,下午路线,晚上路线各n个。给每个司机恰好分配一个下午路线和晚上路线。给出行驶每条路线的时间,如果司机开车时间超过d,则要付加班费d×r。问如何分配路线才能使加班费最少。
虽然代码看起来很水。但一直不理解为什么,找到这位大神的解释与大家参考。http://www.cnblogs.com/AOQNRMGYXLMV/p/4122236.html
不妨假设:A1≥A2,B1≤B2,水平线代表d
情况一:

如图,司机一要付加班费,司机二不用,如果我们将B1、B2交换:
因为B1≤B2,所以付给司机一的加班费不会更少,而司机二的开车时间不会增加,所以也不用付加班费。
因此,交换以后总加班费不会减少。
情况二:

两位司机都要付加班费,则超出时间为(A1 + B1 - d) + (A2 + B2 - d)
如果交换B1、B2:
- 如果两位司机还是超出正常工作时间,那么总的加班费用不变
- 如果交换后司机一加班,司机二不加班,则超出时间为(A1 + B2 - d)。用这个减去原来的时间:(A1 + B2 - d) - (A1 + B1 - d) - (A2 + B2 - d) = d - (B1 + A2),因为此时司机二不加班,所以原式≥0,所以总超出时间不会减少
情况三:

司机一不付加班费,司机二要付。此时加班时长为(A2 + B2 - d)
如果交换B1、B2:
由B1≤B2,A1≥A2,所以B2加到A1上时,司机一一定会加班,司机二一定不会加班,此时加班时长为(A1 + B2 - d),减去原来的时间为(A1 + B2 - d) - (A2 + B2 - d) = (A1 - A2) ≥ 0
所以总加班时间不会减少。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm> using namespace std;
const int maxn = ;
int mor[maxn], aft[maxn];
int main()
{
int n, d, r;
while(~scanf("%d%d%d", &n, &d, &r))
{
if(!n && !d && !r) break;
int sum = ;
for(int i = ; i < n; i++)
scanf("%d", &mor[i]);
for(int i = ; i < n; i++)
scanf("%d", &aft[i]);
sort(mor, mor+n); sort(aft, aft+n);
int ans = ;
for(int i = ; i < n; i++)
{
ans += ((mor[i]+aft[n-i-]-d)*r) >= ? (mor[i]+aft[n-i-]-d)*r : ;
}
printf("%d\n", ans);
}
}
【策略】UVa 11389 - The Bus Driver Problem的更多相关文章
- UVA 11389 The Bus Driver Problem
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82842#problem/D In a city there are n bus ...
- UVA 11389 The Bus Driver Problem 贪心水题
题目链接:UVA - 11389 题意描述:有n个司机,n个早班路线和n个晚班路线,给每个司机安排一个早班路线和一个晚班路线,使得每个早班路线和晚班路线只属于一个司机.如果一个司机早班和晚班总的驾驶时 ...
- UVa 11389 - The Bus Driver Problem 难度:0
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...
- UVa 11389 (贪心) The Bus Driver Problem
题意: 有司机,下午路线,晚上路线各n个.给每个司机恰好分配一个下午路线和晚上路线. 给出行驶每条路线的时间,如果司机开车时间超过d,则要付加班费d×r. 问如何分配路线才能使加班费最少. 分析: 感 ...
- The Bus Driver Problem
题目连接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=90648#problem/G 题意: 给每位司机分配一个白天和晚上的行车路线, ...
- UVA11389 The Bus Driver Problem
题意:有司机,下午路线,晚上路线各n个.给每个司机恰好分配一个下午路线和晚上路线.给出行驶每条路线的时间,如果司机开车时间超过d,则要付加班费d*r.问如何分配路线才能使加班费最少. 贪心 ...
- UVA 11389(贪心问题)
UVA 11389 Time Limit:1000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Description II ...
- UVA 10245 The Closest Pair Problem 最近点问题 分治算法
题意,给出n个点的坐标,找出两点间最近的距离,如果小于10000就输出INFINITY. 纯暴力是会超时的,所以得另辟蹊径,用分治算法. 递归思路将点按坐标排序后,分成两块处理,最近的距离不是在两块中 ...
- UVa 100 - The 3n + 1 problem(函数循环长度)
题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...
随机推荐
- Struts2在Action中访问WEB资源
什么是WEB资源? 这里所说的WEB资源是指:HttpServletRequest, HttpSession, ServletContext 等原生的 Servlet API. 为什么需要访问WEB资 ...
- Spring properties dependency checking
In Spring,you can use dependency checking feature to make sure the required properties have been set ...
- UVaLive 7374 Racing Gems (DP,LIS)
题意:以辆赛车可以从x轴上任意点出发,他的水平速度允许他向每向上移动v个单位,就能向左或向右移动v/r个单位(也就是它的辐射范围是个等腰三角形) 现在赛车从x轴出发,问它在到达终点前能吃到的最多钻石. ...
- HDU 4462 Scaring the Birds (暴力求解,二进制法)
题意:给定一个 n*n的矩阵,在一些位置放上稻草人,每个稻草人的范围是一定,问你最少几个能覆盖整个矩阵. 析:稻草人最多才10个,所以考虑暴力,然后利用二进制法,很容易求解,并且时间很少0ms,注意有 ...
- 乐观锁--CAS
悲观锁与乐观锁的区别 悲观锁会把整个对象加锁占为已有后才去做操作,Java中的Synchronized属于悲观锁.悲观锁有一个明显的缺点就是:它不管数据存不存在竞争都加锁,随着并发量增加,且如果锁的时 ...
- Angularjs 初始化框架
bindJQuery(); publishExternalAPI(angular); jqLite(document).ready(function() { angularInit(document, ...
- Hadoop本地库
目的 鉴于性能问题以及某些Java类库的缺失,对于某些组件,Hadoop提供了自己的本地实现. 这些组件保存在Hadoop的一个独立的动态链接的库里.这个库在*nix平台上叫libhadoop.so. ...
- BZOJ 1043 HAOI2008 下落的圆盘 计算几何
题目大意:n个圆盘依次下落.求终于能看到的轮廓线面积 円盘反对! 让我们一起团结起来! 赶走円盘! 咳咳.非常神的一道题 今天去看了题解和白书才搞出来-- 首先我们倒着做 对于每一个圆盘处理出在它之后 ...
- 关于MVC中DropDownListFor的一个bug
如以下代码: //后台 代码 ViewData["source_type"] = new List<SelectListItem> { "}, "} ...
- CopyU!v2 已经收录到腾讯软件管家!
腾讯软件管家已经正式收录了CopyU!,这样大家又多了一个安全快速下载软件的好途径!腾讯渠道的CopyU!更新将会保持与官方同步,现有下载CopyU!软件的渠道中,官方保证同步的主要有: 1.非凡软件 ...