简单的贪心,注意数量也可能为小数。
AC代码:
#include<iostream>
#include<map>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
#include<list>
#include<set>
#include<stack>
#include<cmath>
#include<vector>
#define inf -100000000
using namespace std;
struct node
{
double num;
double price;
double val;
};
node a[1005];
bool cmp(node x,node y)
{
return x.val>y.val;
}
int main()
{
int n;
double d;
scanf("%d %lf",&n,&d);
for(int i=0;i<n;i++)
{
scanf("%lf",&a[i].num);
}
for(int i=0;i<n;i++)
{
scanf("%lf",&a[i].price);
a[i].val=a[i].price/a[i].num;
}
sort(a,a+n,cmp);
double ans=0;
for(int i=0;i<n;i++)
{
if(d>=a[i].num)
{
ans+=a[i].price;
d-=a[i].num;
}
else
{
ans+=d*a[i].val;
break;
}
}
printf("%.2lf",ans);
}
本文介绍了一个基于贪心算法的简单问题解决方案。通过计算单位价格并按其排序,可以有效地找出在预算内获得商品价值最大化的最优解。代码实现了输入商品数量和预算后,计算能够购买的最大价值。
1239

被折叠的 条评论
为什么被折叠?



