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

C++作业调度问题

洛谷:作业调度方案

🚩 作业调度问题:算法笔记

1. 核心模拟策略:见缝插针

这类题目最容易掉入“按时间一分钟一分钟模拟”的陷阱(你第一版代码的问题)。

  • 正确思路:按照题目给出的优先顺序,依次为每个任务寻找最早可用的连续时间区间

  • 搜索起点:任务 i 的第 j 道工序,其搜索起点 T_start 必须满足:

    T_start >= 该工件前一道工序的结束时间 + 1

2. 关键数据结构

  • 机器时间轴(布尔阵):使用timeline[machine_id][time]记录机器在某一时刻是否被占用。

    • 注意:时间轴长度通常开到 10000 以上以防溢出。

  • 工件状态跟踪

    • last_time[job_id]:记录该工件上一次工序何时结束。

    • step[job_id]:记录该工件目前该做第几个工序。

3. 空档搜索逻辑(核心代码片段)

不要试图用复杂的动态规划,直接模拟“插入”最稳健:

从 start_from 开始向后遍历,直到连续 cost 个时间点对应的机器都处于空闲

for (int t = start_from + 1;; ++t) { bool check = true; for (int delta = 0; delta < cost; ++delta) { if (machine_timeline[machine][t + delta]) { check = false; break; } } if (check) { step[ind_idx]++; last_time[ind_idx] = t + cost - 1; fill_machine_time(t, cost, machine); break; } }

4. 完整代码

// 状态数组 vector<vector<bool>>machine_timeline(25, vector<bool>(10000, false)); vector<int>step(25, 1); vector<int>last_time(25, 0); // 常量数组 vector<int>order; vector<vector<int>>use_machine(25, vector<int>(25)); vector<vector<int>>use_time(25, vector<int>(25)); // 填充时间轴函数 void fill_machine_time(int start, int cost, int idx) { for (int i = start; i < start + cost; ++i)machine_timeline[idx][i] = true; } int main() { // 输入处理 int m, n; cin >> m >> n; for (int i = 1; i <= n * m; ++i) { int x; cin >> x; order.push_back(x); } for (int i = 1; i <= n; ++i) { for (int j = 1; j <= m; ++j) { cin >> use_machine[i][j]; } } for (int i = 1; i <= n; ++i) { for (int j = 1; j <= m; ++j) { cin >> use_time[i][j]; } } int idx = 0; while (idx < (int)order.size()) { int ind_idx = order[idx]; int pro_idx = step[ind_idx]; int cost = use_time[ind_idx][pro_idx]; int start_from = last_time[ind_idx]; int machine = use_machine[ind_idx][pro_idx]; // 插缝 for (int t = start_from + 1;; ++t) { bool check = true; for (int delta = 0; delta < cost; ++delta) { if (machine_timeline[machine][t + delta]) { check = false; break; } } if (check) { step[ind_idx]++; last_time[ind_idx] = t + cost - 1; fill_machine_time(t, cost, machine); break; } } idx++; } // last_time中最大者即为最终时间 int res = 0; for (int i = 1; i <= n; ++i)res = max(res, last_time[i]); cout << res << endl; return 0; }
http://www.jsqmd.com/news/320768/

相关文章:

  • 分享福州口碑好的无线讲解器品牌,哪个容易携带值得入手?
  • 接口还是慢,也许是你的表太规范了
  • 依赖注入(Provide/Inject)的深入理解
  • 揭秘回流背后的“黄金瞳”:10位宝石专家与500人铁军的坚守
  • 不在办公室,如何一掌“握”住工地?移动端PK:红圈跟新中大哪个好?
  • 2026年成都麻将机/机麻租赁服务市场竞争格局与选型深度分析报告
  • Vue Devtools 高级使用技巧全解析
  • 3C认证渠道怎么选,深圳有哪些靠谱的权威平台?
  • 防抖与节流在Vue中的实现
  • 【PHP毕设全套源码+文档】基于PHP的摄影门户网站的设计与实现(丰富项目+远程调试+讲解+定制)
  • 2026覆盖全球的 EOR 服务商推荐,海外名义雇主合作精选
  • 2026 海外雇佣服务商精选:靠谱名义雇主 EOR 公司推荐
  • 【成都高企申报代理机构】实力推荐:汇海立方本地化服务+全国视野
  • 从无形到有形:干法刻蚀机与芯片3D动画的深度融合
  • 2026年口碑不错的雷电云手机专业平台推荐与选购指南
  • 河南种子会能解决行业问题吗?了解其概况与口碑排名
  • 探讨推荐GEO优化加盟厂商,费用低效果好的有哪家
  • 2026年 铁床厂家推荐排行榜:双层/宿舍/公寓/学校/上下铺/工厂员工/工地铁床,专业制造与耐用品质深度解析
  • 西服定制门店怎么选,浪登定制品牌值得考虑
  • 2026年木作品牌推荐:高定家居市场全景评测与选购决策指南
  • KBSG矿用隔爆型干式变压器费用多少,靠谱的按需定制厂家有哪些?
  • 2026年 MVR蒸发浓缩设备厂家推荐榜单:MVR浓缩废水/母液干化机,浓缩母液刮板干化机专业品牌深度解析
  • Nginx:正向代理与反向代理
  • 唐山市滦州市农村自建房造价预算表,2026年唐山市滦州市高性价比自建房公司推荐
  • 2025年度盘点:高速全自动水墨印刷开槽模切机定制厂家TOP10,印刷开槽模切机高速全自动水墨印刷开槽模切机批发厂家推荐榜单
  • duckdb数据库操作
  • 2026转行进入AI行业却不懂编程?解锁零编程基础也能驾驭的9大AI岗位
  • 成人什么益生菌值得分享?精选十款热门品牌解析,清口臭通便秘,调理改善肠胃肠道失衡
  • 2026长沙桶装水配送服务评估报告:五大优选品牌综合测评及政企家庭选型指南
  • 汽车胎压监测系统TPMS蓝牙方案:OM6626