给定有 $ n $ 个任务,每个任务有截止时间和利润,每个任务耗时 1 个时间单位、必须在截止时间前完成,且每个时间槽最多做 1 个任务。为了在规定时间内获得最大利润,可以采用贪心策略,即按利润从高到低排序,尽量安排,则横线处应填写( )。
struct Task {
int deadline; // 截止时间
int profit; // 利润
};
void sortByProfit(vector<Task>& tasks) {
sort(tasks.begin(), tasks.end(),
[](const Task& a, const Task& b) {
return a.profit > b.profit;
});
}
int maxProfit(vector<Task>& tasks) {
sortByProfit(tasks);
int maxTime = 0;
for (auto& t : tasks) {
maxTime = max(maxTime, t.deadline);
}
vector<bool> slot(maxTime + 1, false);
int totalProfit = 0;
for (auto& task : tasks) {
for (int t = task.deadline; t >= 1; t--) {
if (!slot[t]) {
__________________ // 在此处填入代码
break;
}
}
}
return totalProfit;
}A.
slot[t] = true;
totalProfit += task.profit;B.
slot[t] = false;
totalProfit += task.profit;C.
slot[t] = true;
totalProfit = task.profit;D.
slot[t] = false;
totalProfit = task.profit;根据上下文和C++语法规则确定空缺处应填的内容,关注函数调用参数、表达式和返回值类型。
填空时注意语法完整性:分号、括号匹配、函数参数类型和个数、返回值类型。
【考点】贪心算法|排序|时间槽分配
GESP五级算法设计模块,考查贪心策略与时间槽分配。命题人卡住的是"排序后如何动态占用时间槽"这一核心难点,很多考生只背结论却不懂布尔数组状态更新的逻辑。