Description

正解:搜索+随机化。

先写个搜索,枚举所有没有要求的任务属于哪一种任务,然后再用爬山来更新最优解。

具体来说就是先把所有先做任务$A$的按照$a$时间从大到小排序,先做任务$B$的同。然后每次随机交换两个任务的位置,看这样会不会更优。

计算最优解写一个贪心就行了。

 #include <bits/stdc++.h>
#define il inline
#define RG register
#define ll long long using namespace std; struct data{ int t,a,b; }q[]; int st1[],st2[],vis[],n,ans,top1,top2; il int gi(){
RG int x=,q=; RG char ch=getchar();
while ((ch<'' || ch>'') && ch!='-') ch=getchar();
if (ch=='-') q=-,ch=getchar();
while (ch>='' && ch<='') x=x*+ch-,ch=getchar();
return q*x;
} il int cmp1(const int &x,const int &y){
if (q[x].b==q[y].b) return q[x].a<q[y].a;
return q[x].b>q[y].b;
} il int cmp2(const int &x,const int &y){
if (q[x].a==q[y].a) return q[x].b<q[y].b;
return q[x].a>q[y].a;
} il int calc(){
RG int ta=,tb=,res=;
for (RG int i=;i<=top2;++i) tb+=q[st2[i]].b;
for (RG int i=;i<=top1;++i){
ta+=q[st1[i]].a;
if (ta<tb) tb+=q[st1[i]].b;
else tb=ta+q[st1[i]].b;
}
res=tb,ta=tb=;
for (RG int i=;i<=top1;++i) ta+=q[st1[i]].a;
for (RG int i=;i<=top2;++i){
tb+=q[st2[i]].b;
if (tb<ta) ta+=q[st2[i]].a;
else ta=tb+q[st2[i]].a;
}
return max(res,ta);
} il void check(){
top1=top2=;
for (RG int i=;i<=n;++i)
if (vis[i]==) st1[++top1]=i; else st2[++top2]=i;
sort(st1+,st1+top1+,cmp1),sort(st2+,st2+top2+,cmp2);
RG int T=,a1,a2,b1,b2,tmp,res=calc();
while (T--){
if (top1) swap(st1[a1=rand()%top1+],st1[a2=rand()%top1+]);
if (top2) swap(st2[b1=rand()%top2+],st2[b2=rand()%top2+]);
tmp=calc(); if (res>=tmp){ res=tmp; continue; }
if (top1) swap(st1[a1],st1[a2]);
if (top2) swap(st2[b1],st2[b2]);
}
ans=min(ans,res); return;
} il void dfs(RG int x){
if (x>n){ check(); return; }
if (q[x].t!=) vis[x]=q[x].t,dfs(x+);
else vis[x]=,dfs(x+),vis[x]=,dfs(x+);
return;
} int main(){
#ifndef ONLINE_JUDGE
freopen("task.in","r",stdin);
freopen("task.out","w",stdout);
#endif
srand();
n=gi(),ans=<<;
for (RG int i=;i<=n;++i) q[i].t=gi(),q[i].a=gi(),q[i].b=gi();
dfs(),cout<<ans; return ;
}

bzoj2336 [HNOI2011]任务调度的更多相关文章

  1. [HNOI2011]任务调度

    题目描述 有 N 个任务和两台机器 A 与 B.每个任务都需要既在机器 A 上执行,又在机器 B 上执行, 第 i 个任务需要在机器 A 上执行时间 Ai,且需要在机器 B 上执行时间 Bi.最终的目 ...

  2. 2336: [HNOI2011]任务调度 - BZOJ

    一道随机算法的题目 随便用什么随机算法 首先我们可以想到枚举类型3的最终类型,然后再做 先贪心出一个较优的序列,首先我们知道肯定是在A机器上先做完类型1的事件再做类型2的事件,机器B也类似,因为这些没 ...

  3. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  4. .net 分布式架构之任务调度平台

    开源地址:http://git.oschina.net/chejiangyi/Dyd.BaseService.TaskManager .net 任务调度平台 用于.net dll,exe的任务的挂载, ...

  5. 免费开源的DotNet任务调度组件Quartz.NET(.NET组件介绍之五)

    很多的软件项目中都会使用到定时任务.定时轮询数据库同步,定时邮件通知等功能..NET Framework具有“内置”定时器功能,通过System.Timers.Timer类.在使用Timer类需要面对 ...

  6. Spring Quartz实现任务调度

    任务调度 在企业级应用中,经常会制定一些"计划任务",即在某个时间点做某件事情 核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作 任务调度涉及多线程并发.线程池维 ...

  7. Quartz实现任务调度

    一.任务调度概述 在企业级应用中,经常会制定一些"计划任务",即在某个时间点做某件事情,核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作,任务调度涉及多线程并发. ...

  8. 基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度

    http://www.cnblogs.com/bobositlife/p/aspnet-mvc-csharp-quartz-net-timer-task-scheduler.html 在之前的文章&l ...

  9. Quartz任务调度基本使用

    转自:http://www.cnblogs.com/bingoidea/archive/2009/08/05/1539656.html 上一篇:定时器的实现.Java定时器Timer和Quartz介绍 ...

随机推荐

  1. [tools]转载汇总

    1. 发送请求工具—Advanced REST Client Advanced REST Client是Chrome浏览器下的一个插件,通过它可以发送http.https.WebSocket请求.

  2. 利用kvo对集合进行操作

    利用kvo对集合进行操作 NSLog(@"其他学生的成绩%@", [array valueForKeyPath:@"point"]); NSLog(@" ...

  3. C++Array类模板编写笔记

    C++Array类模板 函数模板和类模板都属于泛型技术,利用函数模板和类模板来创建一个具有通用功能的函数和类,以支持多种不同的形参,从而进一步简化重载函数的函数体设计. 声明方法:template&l ...

  4. Vue-Render函数理解示例

    对应文档节点: https://vuefe.cn/v2/guide/render-function.html#Slots <body> <div id="app" ...

  5. Windows Server 2008 R2 搭建网站详细教程

    转自:http://jingyan.baidu.com/album/642c9d34098bf5644a46f71f.html?picindex=4 网上都有一些Windows Server 2008 ...

  6. 我的Java编码规范

    1.类名采用驼峰命名法,首字母大写. 2.类变量采用驼峰命名法,首字母小写. 3.方法名是一个动词短语,首字母小写,尽量能描述清楚这个方法的意图. 4.注释在精不在多,一个好的注释要尽量描述出这段代码 ...

  7. VBA将指定Excel表数据批量生成到另一个Excel表中,每个sheet表一行数据

    Sub AutoInputValNewExcel() Dim sh1, sh2 As Worksheet Dim ws1, ws2 As Workbook ) ) ).Sheets() iRows = ...

  8. iSCSI配置

    iSCSI介绍 几种存储的架构: 直接存取 (direct-attached storage):例如本机上面的磁盘,就是直接存取设备: 透过储存局域网络 (SAN):来自网络内的其他储存设备提供的磁盘 ...

  9. Java设计模式—观察者模式

    观察者模式(Observer Pattern)也叫做发布订阅模式(Publish/subscribe). 其定义如下: 定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都 ...

  10. [小北De编程手记] : Lesson 03 - Selenium For C# 之 元素定位

    无论哪一种自动化测试的驱动框架(基于B/S,桌面应用,还是手机App).都应当具有一套优秀的元素定位技术.通常的自动化测试流程也可以简单的归结为是一个从被测试程序中识别或是定位元素以及执行操作和验证元 ...