"任务分组优化算法:最小化总费用"\n\n本算法解决了一个机器执行任务分组的优化问题,目标是找到最优分组方案,使得所有任务完成的总费用最小。该算法利用动态规划思想,通过比较不同分组方案的总费用,最终找到最小费用方案。\n\n问题描述\n\n有 N 个任务排成一个序列在一台机器上等待执行,它们的顺序不得改变。机器会把这 N 个任务分成若干批,每一批包含连续的若干个任务。从时刻 0 开始,任务被分批加工,执行第 i 个任务所需的时间是 Ti。\n\n另外,在每批任务开始前,机器需要 S 的启动时间,故执行一批任务所需的时间是启动时间 S 加上每个任务所需时间之和。\n\n一个任务执行后,将在机器中稍作等待,直至该批任务全部执行完毕。也就是说,同一批任务将在同一时刻完成。每个任务的费用是它的完成时刻乘以一个费用系数Ci。\n\n请为机器规划一个分组方案,使得总费用最小。\n\n输入\n\n第一行是 N。第二行是 S。\n\n下面 N 行每行有一对正整数,分别为 Ti和 Ci,表示第 i 个任务单独完成所需的时间是 Ti及其费用系数 Ci。\n\n输出\n\n一个数,最小的总费用。\n\n输入样例 1\n\n5\n1\n1 3\n3 2\n4 3\n2 3\n1 4\n\n输出样例 1\n\n153\n\n提示\n\n分组方案为{1,2},{3},{4,5},则完成时间为{5,5,10,14,14},费用C={15,10,30,42,56},总费用为 \n153\n153。\n\n数据范围与提示\n\n对于全部数据,1≤N≤5000,0≤S≤50,1≤Ti ,C i≤100\n\nc++ 代码内容:\n\ncpp\n#include <iostream>\n#include <vector>\n#include <algorithm>\nusing namespace std;\\nstruct Task {\n int time;\n int cost;\n};\\nbool cmp(const Task& t1, const Task& t2) {\n return t1.time * t2.cost > t2.time * t1.cost;\n}\\nint main() {\n int N, S;\n cin >> N >> S;\n vector<Task> tasks(N);\n for (int i = 0; i < N; i++) {\n cin >> tasks[i].time >> tasks[i].cost;\n }\n sort(tasks.begin(), tasks.end(), cmp);\\n vector<long long> dp(N+1, 0);\n for (int i = 1; i <= N; i++) {\n dp[i] = dp[i-1] + tasks[i-1].time + S;\n }\\n long long minCost = dp[N] * tasks[N-1].cost;\n for (int i = N-1; i >= 1; i--) {\n dp[i] = dp[i-1] + tasks[i-1].time + S;\n minCost = min(minCost, dp[i] * tasks[i-1].cost);\n }\\n cout << minCost << endl;\n \n return 0;\n}\n\n\n

任务分组优化算法:最小化总费用

原文地址: https://www.cveoy.top/t/topic/pA3T 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录