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. jmeter(5)——参数化

    之前接触过QTP或者Loadrunner的小伙伴,应该对参数化不陌生,在<badboy详解篇>中也介绍了badboy的参数化,今天说一下jmeter的参数化,同样,我们举例说明,以msn. ...

  2. OutSystems学习笔记。

    ew job and new software, new challenge as well. OutSystems这软件挺好上手的.虽然没有中文文档,但英文文档超级详细,堪称傻瓜版SOP 照着步骤写 ...

  3. C# ASP.NET Core使用HttpClient的同步和异步请求

    引用 Newtonsoft.Json // Post请求 public string PostResponse(string url,string postData,out string status ...

  4. 阿里Java开发电话面试经历--惨败

    近期准备跳槽,想试试知名大企业--阿里.经过boss直聘上一些内部人员的内推,有幸获得了一次电话面试的机会.(虽然在面试开始之前就大概知道结果是如何,但是也总得试试自己个有多水,哈哈哈...) 跟大家 ...

  5. 二:SpringAOP

    一:AOP 面向切面编程思想 横向重复,纵向抽取 |- filter中 |- 动态代理 |- interceptor中 二:动态代理 1.通过动态代理可以体现aop思想 2.对目标对象中的方法进行增强 ...

  6. PHP开发框架CodeIgniter

    CodeIgniter 是一套给 PHP 网站开发者使用的应用程序开发框架和工具包. 通过下面四步来安装 CodeIgniter: 解压缩安装包: 将 CodeIgniter 文件夹及里面的文件上传到 ...

  7. PAT 1034. Head of a Gang[bug]

    有一个两分的case出现段错误,真是没救了,估计是要写bfs的形式,可能栈溢出了 #include <cstdio> #include <cstdlib> #include & ...

  8. jquery弹窗居中-类似alert()

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  9. JavaScript 二维数组排列组合2

    <html> <head> <title>二维数组排列组合</title> </head> <body> <div id= ...

  10. Apache服务器运维笔记(5)----容器的处理顺序

    容器在配置文件中是可以多次使用的,同时也可以嵌套使用,但是 Apache 在处理容器时却是有一定顺序的,因此在编写容器配置时需要按照一定的顺序来进行,否则Apache处理的结果很可能不是管理员想要的. ...