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介绍 ...
随机推荐
- css用hover制作下拉菜单
首先我们的需求就是 制作一个鼠标移动到某个区域就会有下拉菜单的弹出,这样会有更多的子类内容,示例代码如下: <!DOCTYPE html> <html lang="en&q ...
- php对图片加水印--将一张图片作为水印加到另一张图片
代码如下: /** * 图片加水印(适用于png/jpg/gif格式) * * @param $srcImg 原图片 * @param $waterImg 水印图片 * @param $s ...
- js验证港澳居民通行证号码是否合规
需求:最近要做实名验证的功能,但是验证我们要验证严谨一点,参考了网上关于验证港澳居民通行证号码的代码,总结一下. 代码: function checkHKMacao(code){ var tip = ...
- [转]Oracle中没有 if exists(...)
本文转自:http://blog.csdn.net/hollboy/article/details/7550171 对于Oracle中没有 if exists(...) 的语法,目前有许多种解决方法, ...
- [转]OLAP的12条准则
OLAP的12条准则 Multidimensional conceptual view OLAP模型必须提供多维概念视图 User-analysts would view an enterprise ...
- vue本地设置请求接口及数据
1.安装axios yarn add axios 2.在入口文件main.js中设置 import { getRequest, postRequest} from './libs/api';//导入 ...
- 三:SSM框架整合思路
一:jar包 1.spring(包括springmvc) 2.mybatis 3.mybatis-spring整合包 4.数据库驱动 5.第三方连接池 6.json依赖包jackson 二:整合思路 ...
- servlet开发(四)之ServletContext
接上一篇. 2.3.4 利用ServletContext对象读取资源文件 比如我们要读取web项目中的配置文件. 项目目录结构如下: 使用ServletContext对象读取资源文件的示例代码如下: ...
- 在mysql语句中为什么要加反引号
在MySQL语句中我们有时候经常会遇到反引号(``),刚开始的时候不知道什么意思,他是什么作用呢? Select * from `member` order by posts desc limit 0 ...
- 学习CSS制作菜单列表,举一反三
1.普通的二三级菜单 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type&qu ...