#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;
}
``
有 N 个任务排成一个序列在一台机器上等待执行它们的顺序不得改变。机器会把这 N 个任务分成若干批每一批包含连续的若干个任务。从时刻 0 开始任务被分批加工执行第 i 个任务所需的时间是 Ti。另外在每批任务开始前机器需要 S 的启动时间故执行一批任务所需的时间是启动时间 S 加上每个任务所需时间之和。一个任务执行后将在机器中稍作等待直至该批任务全部执行完毕。也就是说同一批任务将在同一时刻完成。每

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

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