C语言算法题解:运输石油,最大化利润

题目描述

某石油公司需要向A、B两地运输石油。两地的需求量不同,而一辆车只能装载一定量的石油。经过计算A地需要a辆车,B地需要b辆车运输才能满足需求。现在一共有n辆车分布在各地,每辆车前往A、B两地运输石油均可以获得一定不等的利润。 现在请你安排a辆车前往A地,b辆车前往B地运输石油,使得在满足A、B两地石油需求的前提下,获得最大的利润。每辆车只能前往一地运输石油。

输入描述

输入第一行包含三个整数n,a,b,分别表示公司的车辆数量和A、B两地车辆所需数量,保证a+b<=n。(1<=n<=1000) 接下来有n行,每行两个正整数x,y,分别表示该车完成A地任务的利润和B地任务的利润。

输出描述

输出仅包含一个正整数,表示最大获得的利润和。

示例

示例1

输入:

5 2 24 23 35 45 31 5

输出:

18

提示

将第3、4辆车派往A地,将第2、5辆车派往B地,可获得最大利润。

C语言解决方案c#include <stdio.h>

#define MAX_N 1000

typedef struct Car { int profit_a; int profit_b;} Car;

int maxProfit(int n, int a, int b, Car cars[]) { int max_profit = 0; int remaining_a = a; int remaining_b = b;

// 贪心策略:优先选择利润更大的任务    for (int i = 0; i < n; i++) {        // 如果A地还有需求且当前车辆运往A地的利润更高        if (remaining_a > 0 && cars[i].profit_a >= cars[i].profit_b) {            max_profit += cars[i].profit_a;            remaining_a--;        } else if (remaining_b > 0 && cars[i].profit_b >= cars[i].profit_a) {            // 如果B地还有需求且当前车辆运往B地的利润更高            max_profit += cars[i].profit_b;            remaining_b--;        }    }

return max_profit;}

int main() { int n, a, b; Car cars[MAX_N];

scanf('%d %d %d', &n, &a, &b);

for (int i = 0; i < n; i++) {        scanf('%d %d', &cars[i].profit_a, &cars[i].profit_b);    }

int max_profit = maxProfit(n, a, b, cars);

printf('%d

', max_profit);

return 0;}

代码解析

  1. 数据结构定义: 使用结构体 Car 来存储每辆车到A地和B地的利润信息,方便后续处理。2. 贪心策略: - 遍历所有车辆,优先选择利润更高的任务执行,即优先满足A地或B地需求,并选择当前车辆利润更高的目的地。 - 使用 remaining_aremaining_b 变量跟踪A地和B地剩余的需求量。3. 计算最大利润: 函数 maxProfit 根据贪心策略计算最大利润,并返回结果。

注意

本解决方案假设输入的数据符合题目要求,并未进行详细的错误处理。在实际应用中,应该添加适当的错误检查和边界条件处理,以提高代码的健壮性。

C语言算法题解:运输石油,最大化利润

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

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