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

第41次ccfcsp机器人项目管理

题目:
小 P 计划招募 n 个机器人完成一个项目:每个机器人负责其中的一项任务,编号从 1 到 n,任务之间互不干扰。如果完成任务 i 的耗时为 ti​,则该项目总耗时为 t1+t2+⋯+tn。

作为项目管理者,小 P 可以用有限的预算为机器人们购买咖啡加油。其中负责任务 i 的机器人,最多可以喝 ai 杯咖啡,从而将该任务耗时缩短 bi​(最终耗时即为 ti−bi​)。

根据任务的特性和机器人的偏好,n 项任务可分为“灵活型”和“普通型”两类。

灵活型:如果任务 i 是灵活型,则可以提供给该任务 [0,ai​] 范围内的任意实数杯咖啡,从而将其加速相应比例。

若给任务 i 提供 ki​⋅ai​ 杯咖啡,则该任务对应耗时 ti​−ki​⋅bi​ (0≤ki​≤1)。

普通型:只能提供给任务 0 或 ai​ 杯咖啡。

换言之,只有将耗时缩短 bi 和不加速两种选择,而不能提供半杯咖啡。

已知小 P 可以为机器人们提供最多 m 杯咖啡,试计算完成整个项目的最短时间。

输入格式

从标准输入读入数据。

输入的第一行包含空格分隔的两个正整数 n 和 m,分别表示任务数量和咖啡数量。

接下来 n 行,每行包含空格分隔的四个整数 oi,ti,ai,bi​,表示一个任务。其中 oi∈{0,1} 表示任务类别,oi​=0 表示灵活型、oi​=1 表示普通型;其余变量含义如上所述,输入数据保证 ti​>bi​,即缩短后的耗时仍大于零。

输出格式

输出到标准输出。

输出一个实数,表示完成整个项目的最短时间。

这个代码用的贪心逻辑,完全没有用二分:

这只是我想出来的一个解法,但是可能有其他没有考虑全面的地方,如果用问题可以提出。

#include <bits/stdc++.h> using namespace std; // 定义全局数组,分别存储任务类型(o)、原始耗时(t)、最多分配咖啡数(a)、最多减少时长(b) int o[1000]={0}, t[1000]={0}, a[1000]={0}, b[1000]={0}, ans=0; int main(){ int n, m; // 输入任务总数 n 和 咖啡总数 m cin >> n >> m; // 定义索引数组 g,用于后续排序(记录任务的下标) int g[n]={0}; // e 数组存储每个任务的“性价比”(每杯咖啡能减少的时间),sum 记录所有任务的原始总耗时 double e[1000]={0}, dp[1000]={0}, sum=0, ans=0; // 1. 读取输入并预处理 for(int i=1; i<=n; i++){ // 按照题目要求输入:类型、时间、倍数、减少时间 cin >> o[i] >> t[i] >> a[i] >> b[i]; // 计算性价比:总减少时长 / 总杯数 e[i] = 1.000 * b[i] / a[i]; // 累加原始总耗时 sum = sum + t[i]; } // 初始化索引数组,g[i] 存储任务的原始下标 i for(int i=1; i<=n; i++){ g[i] = i; } // 2. 贪心核心:按性价比从高到低对任务下标进行排序 sort(g+1, g+n+1, [&](int f, int h){ return e[f] > e[h]; // 性价比高的任务排在前面,优先分配咖啡 }); // 3. 遍历排序后的任务,依次分配咖啡 for(int i=1; i<=n; i++){ // 如果是固定型任务(o==1),且剩下的咖啡足够满足它的最大需求 if(o[g[i]] == 1 && a[g[i]] <= m){ ans = ans + b[g[i]]; // 直接加上它能减少的最大时长 m = m - a[g[i]]; // 扣除消耗的咖啡 } // 如果是灵活型任务(o==0),且手里还有剩余咖啡 else if(o[g[i]] == 0 && m > 0){ // 情况A:剩下的咖啡足够把这个灵活型任务喝满 if(m >= a[g[i]]) { ans = ans + b[g[i]]; // 加上最大减少时长 m = m - a[g[i]]; // 扣除消耗的咖啡 } // 情况B:剩下的咖啡不够喝满,只能全部给它(此时可以喝小数杯) else { // 减少的时长 = 剩余咖啡数 * 每杯的性价比 ans = ans + m * e[g[i]]; m = 0; // 咖啡全部用完 } } } // 4. 输出最终结果:原始总耗时 - 通过喝咖啡减少的总时长 cout << sum - ans; return 0; }
http://www.jsqmd.com/news/899315/

相关文章:

  • P1437 [HNOI2004] 敲砖块 题解
  • ChatGPT市场增长拐点已至?——基于217家B端客户采购决策链、LTV/CAC比值及替代率的预警分析(内部调研未公开版)
  • 哔哩下载姬DownKyi:如何轻松免费下载B站8K高清视频的完整指南
  • 3分钟掌握专业字体:设计师必备的思源宋体终极指南
  • 【司法部新规预警】:2024年起草合规性新规落地,ChatGPT法律文件必须通过这6道合规校验关卡
  • ChatGPT不是“黑盒工具”,而是新岗位:揭秘头部金融/医疗/制造企业正在紧急部署的9项KPI校准标准
  • 百度网盘限速无解?这个Python工具让你免费享受会员级下载速度
  • 动态相量模型与FPGA并行计算在混合MMC实时仿真中的应用
  • 2026西安财务外包怕踩坑?选长安德勤财税,告别乱账、错报、隐形消费! - 小柏云
  • 2026年 磁铁厂家/钕铁硼磁铁/异形磁铁/方形磁铁/圆形磁铁推荐榜:高矫顽力与精密磁组件的实力之选 - 品牌企业推荐师(官方)
  • SE-Net:从通道注意力到模型性能跃迁的深度解析
  • 百考通AI:实践报告智能生成,轻松输出专业内容
  • FPGA实现DCT-IV与FBMC多载波调制:SoC架构、定点量化与性能对比
  • 从llama.cpp演进看本地大模型部署:技术成熟度与实战指南
  • 3大核心功能解密:LizzieYzy如何成为围棋AI分析领域的瑞士军刀
  • 2026年同步带选型指南:双面齿、聚氨酯、橡胶与PU同步带品牌实力解析与工业应用推荐 - 品牌企业推荐师(官方)
  • 别再死记硬背了!用Python+ChatGPT帮你搞定《人工智能导论》课后习题
  • 抖音内容批量下载工具:5分钟掌握高效数据采集技巧
  • OBS多平台直播终极指南:obs-multi-rtmp插件一键同步推流到多个平台
  • 量子混合模型QLID-Net:在数据稀缺与噪声环境下提升非侵入式负荷识别性能
  • 2026低代码市占榜单:四大头部平台技术硬核横评
  • 混合优先级-松弛度调度算法:动态环境下实时非周期任务调度的工程实践
  • P3176 [HAOI2015] 数字串拆分 - Link
  • ChatGPT vs Claude 4 vs Gemini 2.5 Pro vs Qwen3 vs DeepSeek-R1:谁在中文长文本理解、代码生成与合规性上真正胜出?
  • 为什么你的ChatGPT写不出《雨巷》?——基于2372首训练诗集的语义张力分析,揭示诗歌生成中「陌生化」失效的3个隐藏断点
  • Visio导出矢量图总带白边?一个隐藏的‘打印属性’设置就能搞定(保姆级避坑教程)
  • 别再手动写手册了!:2024最新版ChatGPT员工手册生成工作流(含ISO 27001信息安全部分自动嵌入)
  • 构建内容审核辅助系统时集成多模型以提高判断准确性
  • 别再用SoapUI了!Postman搞定老旧WebService接口测试的保姆级教程
  • 基于形式化方法与网络流优化的自主系统反应式测试合成