C语言算法题解:运输石油,最大化利润
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;}
代码解析
- 数据结构定义: 使用结构体
Car来存储每辆车到A地和B地的利润信息,方便后续处理。2. 贪心策略: - 遍历所有车辆,优先选择利润更高的任务执行,即优先满足A地或B地需求,并选择当前车辆利润更高的目的地。 - 使用remaining_a和remaining_b变量跟踪A地和B地剩余的需求量。3. 计算最大利润: 函数maxProfit根据贪心策略计算最大利润,并返回结果。
注意
本解决方案假设输入的数据符合题目要求,并未进行详细的错误处理。在实际应用中,应该添加适当的错误检查和边界条件处理,以提高代码的健壮性。
原文地址: https://www.cveoy.top/t/topic/bKgY 著作权归作者所有。请勿转载和采集!