当前位置: 首页 > news >正文

P3212 [HNOI2011] 任务调度 - Link

题意

\(n\) 个任务,第 \(i\) 个任务需要在 \(A\) 机器上执行 \(a_i\) 时间,在 \(B\) 机器上执行 \(b_i\) 时间,每个任务有一个类型 \(t_i\)

  1. 类型 \(1\)
    需要先在 \(A\) 机器上执行,再在 \(B\) 机器上执行。
  2. 类型 \(2\)
    需要现在 \(B\) 机器上执行,再在 \(A\) 机器上执行。
  3. 类型 \(3\)
    无要求。

问把所有任务完成的最短时间。
\(n\le20\)

思路

先暴力枚举出所有 \(t_i=3\) 的物品先在 \(A\) 执行还是现在 \(B\) 执行。
现在问题变成了:\(n\) 个任务,每个任务要先在 \(A/B\) 上执行,问把全部任务执行完成的总时间。
显然,最优情况是 \(\max(\sum a_i,\sum b_i)\),但是有时候取不到。设初始在 \(A\) 的物品集合为 \(S_A\),初始在 \(B\) 的物品集合为 \(S_B\),不妨设 \(\sum_{i\in S_A}a_i\ge\sum_{i\in S_B}b_i\),那么 \(A\) 机器工作的时间一定是满的,即从 \(0\) 工作到 \(\sum a_i\),考虑 \(B\) 机器。设 \(f_s\) 表示 \(A\) 机器完成了 \(s\) 中的物品 \((s\subset S_A)\)\(B\) 机器最少有多久没工作。显然,当 \(\sum_{i\in s}a_i\le\sum_{i\in S_B}b_i\) 时,\(f_s\)\(0\),否则枚举上一个完成的物品,进行转移。
时间复杂度未知,估算一下大概是 \(2\times10^8\),但是跑不满。

代码

// Problem: P3212 [HNOI2011] 任务调度
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P3212
// Memory Limit: 128 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include<bits/stdc++.h>
using namespace std;
namespace IO{template<typename T>inline void read(T&x){x=0;char c=getchar();bool f=0;while(!isdigit(c)) c=='-'?f=1:0,c=getchar();while(isdigit(c)) x=x*10+c-'0',c=getchar();f?x=-x:0;}template<typename T>inline void write(T x){if(x==0){putchar('0');return ;}x<0?x=-x,putchar('-'):0;short st[50],top=0;while(x) st[++top]=x%10,x/=10;while(top) putchar(st[top--]+'0');}inline void read(char&c){c=getchar();while(isspace(c)) c=getchar();}inline void write(char c){putchar(c);}inline void read(string&s){s.clear();char c;read(c);while(!isspace(c)&&~c) s+=c,c=getchar();}inline void write(string s){for(int i=0,len=s.size();i<len;i++) putchar(s[i]);}template<typename T>inline void write(T*x){while(*x) putchar(*(x++));}template<typename T,typename...T2> inline void read(T&x,T2&...y){read(x),read(y...);}template<typename T,typename...T2> inline void write(const T x,const T2...y){write(x),putchar(' '),write(y...),sizeof...(y)==1?putchar('\n'):0;}
}using namespace IO;
const int maxn=30,inf=1000000000;
int n,A[maxn],B[maxn],t[maxn],cnt3,cnt_a,cnt_b,f[1048576],sum2a[1048576],sum2b[1048576];
short hv[1048576][21],cnt_hv[1048576];
struct node{int a,b;}a[maxn],b[maxn];
int calc(){int suma=0,sumb=0;for(int i=1;i<=cnt_a;i++) suma+=a[i].a;for(int i=1;i<=cnt_b;i++) sumb+=b[i].b;if(suma<sumb){swap(a,b);swap(cnt_a,cnt_b);swap(suma,sumb);for(int i=1;i<=cnt_a;i++) swap(a[i].a,a[i].b);for(int i=1;i<=cnt_b;i++) swap(b[i].a,b[i].b);}for(int s=0;s<(1<<cnt_a);s++){sum2a[s]=sum2b[s]=0;for(int i=1;i<=cnt_hv[s];i++) sum2a[s]+=a[hv[s][i]].a;for(int i=1;i<=cnt_hv[s];i++) sum2b[s]+=a[hv[s][i]].b;}for(int s=0;s<(1<<cnt_a);s++){int sum=sum2a[s];if(sum<=sumb){f[s]=0;continue;}f[s]=inf;for(int ii=1;ii<=cnt_hv[s];ii++){int i=hv[s][ii];int lt=(s^(1<<i-1));int tb=sumb+sum2b[lt]+f[lt];int ta=sum;f[s]=min(f[s],f[lt]+max(0,ta-tb));}}int sumalla=0,sumallb=0;for(int i=1;i<=cnt_a;i++) sumalla+=a[i].a,sumallb+=a[i].b;for(int i=1;i<=cnt_b;i++) sumalla+=b[i].a,sumallb+=b[i].b;return max(sumalla,f[(1<<cnt_a)-1]+sumallb);
}
signed main(){for(int i=0;i<1048576;i++)for(int j=1;j<=20;j++) if(i&(1<<j-1)) hv[i][++cnt_hv[i]]=j;read(n);for(int i=1;i<=n;i++) read(t[i],A[i],B[i]),cnt3+=(t[i]==3);int ans=inf;for(int i=0;i<(1<<cnt3);i++){int nwcnt=0;cnt_a=cnt_b=0;for(int j=1;j<=n;j++){if(t[j]==1) a[++cnt_a]={A[j],B[j]};else if(t[j]==2) b[++cnt_b]={A[j],B[j]};else{if(i&(1<<nwcnt)) a[++cnt_a]={A[j],B[j]};else b[++cnt_b]={A[j],B[j]};nwcnt++;}}ans=min(ans,calc());}write(ans);return 0;
}
http://www.jsqmd.com/news/950983/

相关文章:

  • 2026窗户漏水维修推荐:补漏剂/密封胶/服务商选型指南 - 资讯纵览
  • Notepad4(原 Notepad2)轻量文本编辑器使用与安装技术教程
  • 2026前端必备:手把手教你打造AI Agent,引领全栈开发新潮流!
  • Xournal++:为什么这款免费开源手写笔记软件是你的数字笔记革命终极选择?
  • 【通信】基带QAM通信系统Matlab仿真
  • ControlNet-v1.1 FP16模型集:当AI绘画遇到效率革命
  • 终极Arduino ESP32安装指南:从零开始轻松搭建物联网开发环境
  • 2026年 上海/江苏实验室系统与家具设备实力厂家解析:通排风/变风量/新风系统及全钢/PP/不锈钢实验台 - 品牌企业推荐师(官方)
  • 2026年江苏实验室家具设备及通风柜制造企业:技术实力与安全可靠之选 - 品牌企业推荐师(官方)
  • 如何快速修复幻兽帕鲁跨平台存档迁移:终极GUID冲突解决方案
  • 计算机毕业设计之大学生招聘信息智能推荐系统的设计与实现
  • RAG系统为何总出错?三大核心机制,让你的检索能力“知不知”!
  • 基于Python的智慧能源负荷预测全流程工具包,含数据清洗、特征构建、可视化与查询功能
  • 2026年常州遗产继承律师怎么挑?5位专业律师实用指南 - 本地品牌推荐
  • 实木家具品牌推荐性价比 - 舒雯文化
  • API集成管理平台选型指南:五款主流方案能力解析
  • AI工具与智能融资整合落地指南(从API对接到风控模型嵌入的7大关键断点突破)
  • 如何快速解决Windows热键冲突:专业工具使用指南
  • Agent“活”起来!企业级动态RAG的可靠记忆与知识进化之路
  • 3步掌握EPubBuilder:打造专业级在线电子书编辑器实战指南
  • ESP-SR:嵌入式边缘AI语音识别框架的架构设计与高效实现
  • 2026年 工衣厂家/防静电工衣/电子厂工衣/食品厂工衣/夏天工衣推荐榜单:透气舒适与安全防护兼备的实力品牌解析 - 品牌企业推荐师(官方)
  • AI时代,程序员焦虑升级:是内卷CRUD还是借力AI?35岁危机如何破局?
  • 从引脚矩阵到万物互联:ESP32-Arduino如何重新定义物联网开发边界
  • 2026年实测10款降AIGC平台推荐:免费与付费全对比,毕业论文淡化AIGC痕迹必看 - 降AI小能手
  • nf-core流程本地化实战:从AWS-iGenomes到自定义参考基因组的配置避坑指南
  • 告别死记硬背:用‘小树’和‘铃儿’轻松搞定三十六计(附110位数字编码表)
  • 镜像视界硬核技术,领跑视频孪生
  • Calibre中文路径问题终极解决方案:告别拼音目录,享受原生中文路径
  • 2026年苏州线下演出公司推荐:传媒公司服务内容与直播孵化与IP打造及网红明星孵化优势解析 - 资讯纵览