- 求解最优化问题
例题:
月饼收益最优化:
月饼种类 市场需求量
对应的库存
对应的总售价
求:最大收益(出售哪些月饼收益最大)
例:
3 20
18 15 10
75 72 45
94.5(15分的72售价都出+5分的45售价的)
代码:
/*贪心算法:求最优化问题
有月饼的种类、库存、总售价;市场需求量
求最大收益。
例如:
3 20
18 15 10
75 72 45*/
#include<bits/stdc++.h>
using namespace std;
//构造结构体:月饼的几个专有属性
struct mooncake{
double store;//库存
double sell;//总售价
double price;//单价
}cake[100];
bool cmp(mooncake a,mooncake b){
return a.price > b.price;
}
int main(){
int n;//种类
double D;//总需求量
scanf("%d%lf",&n,&D);
for(int i = 0; i < n; i++){
scanf("%lf",&cake[i].store);
}
for(int i = 0; i < n; i++){
scanf("%lf",&cake[i].sell);
cake[i].price=cake[i].sell/cake[i].store;
}
sort(cake,cake+n,cmp);
double sum;
for(int i = 0; i < n; i++){
if(cake[i].store < D){//月饼量不够需求量,就全部拿出来
D = D - cake[i].store;//更新需求量
sum = sum + cake[i].sell;//更新收益
}else{//如果月饼量够了需求量,就拿出需求量的部分
sum = sum + cake[i].price*D;
break;
}
}
printf("%.2f",sum);
return 0;
}