https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2255

题意:

有n个任务,每个任务有3个参数ri,di和wi,表示必须在时刻[ri,di]之内执行,工作量为wi。处理器的速度可以为任意值,任务不一定要连续执行,可以分成若干块,求最大速度的最小值。

思路:

最大值的最小值问题可以考虑用二分法来做。

这道题目怎么判断速度合法是关键,我们可以使用秒为单位来判断。计算时使用贪心法,d值小的优先处理。用一个优先队列(d值小的优先级高),时间以秒为单位从1开始一次增加,如果一个任务的r值等于了当前时间t,说明该任务可以开始执行了,那么就把它加入到队列中。每个一秒的时间内处理该段时间内可以执行的d值最小的任务。

 #include<iostream>
#include<algorithm>
#include<string>
#include<queue>
using namespace std; const int maxn = + ; int n; struct node
{
int r, d, w;
bool operator <(const node& rhs) const
{
return d>rhs.d; //右坐标越大的优先级越低
}
}a[maxn]; bool cmp(node a, node b)
{
return a.r < b.r;
} bool check(int speed)
{
priority_queue<node> q;
int t = , cnt = ;
while (cnt<n || !q.empty())
{
while (cnt < n && a[cnt].r == t) q.push(a[cnt++]);
int s = speed;
while (!q.empty() && s!=)
{
node p = q.top();
q.pop();
int temp = min(s, p.w);
s -= temp;
p.w -= temp;
if (p.w != ) q.push(p);
}
t++;
if (!q.empty() && q.top().d == t) return false;
if (q.empty() && cnt == n) return true;
}
} int main()
{
ios::sync_with_stdio(false);
//freopen("D:\\txt.txt", "r", stdin);
int T;
cin >> T;
while (T--)
{
cin >> n;
for (int i = ; i < n; i++)
{
cin >> a[i].r >> a[i].d >> a[i].w;
}
sort(a, a + n, cmp);
int left = , right = ;
while (left <= right)
{
int mid = (left + right) / ;
if (check(mid)) right = mid-;
else left = mid + ;
}
cout << left << endl;
}
}

最新文章

  1. RMAN-03002, RMAN-06059, ORA-19625 and ORA-27037 When Running RMAN Backup of Archivelogs
  2. win7怎么彻底关闭全/半角转换快捷键? imetool.exe
  3. $.getJSON ashx 跨域
  4. 【解题报告】POJ-1108 Split Windows
  5. 关于jsp中超链接的相对路径
  6. 简单了解python使用正则表达式
  7. openstack项目【day24】:OpenStack mitaka部署
  8. Oracle单机Rman笔记[6]---记一次oracle脱机异地还原
  9. MVC(面试)
  10. 【iCore4 双核心板_ARM】例程二十七:LWIP_NETIO实验——以太网测速
  11. EBS QRCODE
  12. docker 系列之 docker安装
  13. 2017ICPC北京赛区网络赛 Visiting Peking University(简单思维)
  14. ideal通过svn上传项目和激活方式
  15. java生成扑克牌----java基础学习总结
  16. [工具] 各种主流 SQLServer 迁移到 MySQL 工具对比
  17. Centos expect spawn、linux expect 用法
  18. 数据库 update select 多列操作
  19. java入门---变量类型&amp;类变量&amp;局部变量&amp;实例变量&amp;静态变量
  20. 转:Socket服务器整体架构概述

热门文章

  1. vertx打成jar包发布工程,访问静态页面
  2. 测试人员需要了解的sql知识(基础篇)
  3. 尝试.Net Core—使用.Net Core + Entity FrameWork Core构建WebAPI(一)
  4. 转载一篇debug文章
  5. testng入门教程16数据驱动(把数据写在xml)
  6. 如何提取app软件的apk格式中的字体?
  7. hdu5145 莫队算法
  8. Intro to Python for Data Science Learning 3 - functions
  9. vertical解锁table
  10. [转载] iframe嵌入网页的用法