有 N 个任务排成一个序列在一台机器上等待执行它们的顺序不得改变。机器会把这 N 个任务分成若干批每一批包含连续的若干个任务。从时刻 0 开始任务被分批加工执行第 i 个任务所需的时间是 Ti。另外在每批任务开始前机器需要 S 的启动时间故执行一批任务所需的时间是启动时间 S 加上每个任务所需时间之和。一个任务执行后将在机器中稍作等待直至该批任务全部执行完毕。也就是说同一批任务将在同一时刻完成。每
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Task {
int time;
int cost;
};
bool cmp(const Task& t1, const Task& t2) {
return t1.time * t2.cost > t2.time * t1.cost;
}
int main() {
int N, S;
cin >> N >> S;
vector<Task> tasks(N);
for (int i = 0; i < N; i++) {
cin >> tasks[i].time >> tasks[i].cost;
}
sort(tasks.begin(), tasks.end(), cmp);
vector<long long> dp(N+1, 0);
for (int i = 1; i <= N; i++) {
dp[i] = dp[i-1] + tasks[i-1].time + S;
}
long long minCost = dp[N] * tasks[N-1].cost;
for (int i = N-1; i >= 1; i--) {
dp[i] = dp[i-1] + tasks[i-1].time + S;
minCost = min(minCost, dp[i] * tasks[i-1].cost);
}
cout << minCost << endl;
return 0;
}
``
原文地址: https://www.cveoy.top/t/topic/hRXo 著作权归作者所有。请勿转载和采集!