bzoj2336 [HNOI2011]任务调度
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]任务调度的更多相关文章
- [HNOI2011]任务调度
题目描述 有 N 个任务和两台机器 A 与 B.每个任务都需要既在机器 A 上执行,又在机器 B 上执行, 第 i 个任务需要在机器 A 上执行时间 Ai,且需要在机器 B 上执行时间 Bi.最终的目 ...
- 2336: [HNOI2011]任务调度 - BZOJ
一道随机算法的题目 随便用什么随机算法 首先我们可以想到枚举类型3的最终类型,然后再做 先贪心出一个较优的序列,首先我们知道肯定是在A机器上先做完类型1的事件再做类型2的事件,机器B也类似,因为这些没 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- .net 分布式架构之任务调度平台
开源地址:http://git.oschina.net/chejiangyi/Dyd.BaseService.TaskManager .net 任务调度平台 用于.net dll,exe的任务的挂载, ...
- 免费开源的DotNet任务调度组件Quartz.NET(.NET组件介绍之五)
很多的软件项目中都会使用到定时任务.定时轮询数据库同步,定时邮件通知等功能..NET Framework具有“内置”定时器功能,通过System.Timers.Timer类.在使用Timer类需要面对 ...
- Spring Quartz实现任务调度
任务调度 在企业级应用中,经常会制定一些"计划任务",即在某个时间点做某件事情 核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作 任务调度涉及多线程并发.线程池维 ...
- Quartz实现任务调度
一.任务调度概述 在企业级应用中,经常会制定一些"计划任务",即在某个时间点做某件事情,核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作,任务调度涉及多线程并发. ...
- 基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度
http://www.cnblogs.com/bobositlife/p/aspnet-mvc-csharp-quartz-net-timer-task-scheduler.html 在之前的文章&l ...
- Quartz任务调度基本使用
转自:http://www.cnblogs.com/bingoidea/archive/2009/08/05/1539656.html 上一篇:定时器的实现.Java定时器Timer和Quartz介绍 ...
随机推荐
- QSS为Qt程序添加不一样的样式
添加 QSS 样式文件 在 Qt 项目中新建一个或使用已有的 Qt Resource File,在资源文件下面新建一个普通文件,命名为 Light.qss: 为 Light.qss 添加如下内容: 这 ...
- vue中echarts随窗体变化
<div id="myChart" :style="{width: '100%', height: '345px'}"></div> & ...
- 使用sqlcmd进行MS-dos方式查询
在windows选择‘运行’vista需要以管理员身份运行,打开命令提示符窗口 要连接到sql server服务器,必须指定服务器名称,安装命名实例中的,还必须指定实例名.默认情况下,sqlcmd使用 ...
- ASP.NET MVC4 新手入门教程特别篇之一----Code First Migrations更新数据库结构(数据迁移)修改Entity FrameWork 数据结构(不删除数据)
背景 code first起初当修改model后,要持久化至数据库中时,总要把原数据库给删除掉再创建(DropCreateDatabaseIfModelChanges),此时就会产生一个问题,当我们的 ...
- JAVA线程池的原理分析
线程池的作用 1.降低资源的消耗 2.提高效率 3.方便管理 相关概念 corePoolSize核心线程数:核心池的大小,当有任务到达之后,就会创建一个线程去执行任务,当任务数量到达核心线程数后,就会 ...
- springboot伪静态
在日常网站访问中,会把动态地址改造成伪静态地址. 例如: 访问新闻栏目 /col/1/,这是原有地址,如果这样访问,不利于搜索引擎检索收录,同时安全性也不是很好. 改造之后: /col/1.html. ...
- MyBatis入门篇
一.什么是MyBatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改 ...
- Csharp: speech to text, text to speech in win
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 关于纯css写三角形在firefox下的锯齿问题
相信很多人都用过利用border来实现小三角箭头,百度一下,这类的文章多如牛毛,这里我还是啰嗦点把常用的方法陈列出来: .triangle_border_up{ width:; height:; bo ...
- MySQL创建子视图并查看的时候,字符集报错问题
进入命令行模式, 如果MySQL数据库已经安装好,可以使用下列SQL命令查看MySQL当前的字符集设置: mysql> show variables like 'character_set_%' ...