文章
16
粉丝
0
获赞
66
访问
3.5k
首先进行分析题意,明显需要采用贪心的思想,此题的难点在于用单价最低的可乐进行购买可能不能凑整,此时有两种情况,一种是用单价最便宜的再买一瓶凑整,另一种是用其他各种单价的进行凑整,所以我们每次都需要进行比较。故我们首先先用最低单价去买,若能凑整则肯定为最优解,若不能凑整则我们进入两种情况的比较,①多买一瓶(此时未必最便宜)用min变量保存②剩下所需的毫升数用次低价的可乐买(进入下一步循环,用次低价买)。
完整代码如下:
#include <bits/stdc++.h>
using namespace std;
struct cole//此处定义一个结构体用来表示可乐的各个参数
{
int v;//表示体积
int price;//表示价格
double pre; // 表示每毫升多少钱
} a[31];
int cmp(cole a, cole b)//用于实现排序,让可乐按单价升序排
{
return a.pre < b.pre;
}
int main()
{
int n;
long long L;
while (cin >> n >> L)
{
for (int i = 0; i < n; i++)
{//可乐数据初始化
cin >> a[i].price;
a[i].v = pow(2, i); // 此处pow函数为库函数,前一个参数为底数,后一个参数为指数
a[i].pre = (double)a[i].price / a[i].v;
}
sort(a, a + n, cmp);//排序
int j = 0;//用于实现改变购买的可乐种类
&n...
登录后发布评论
暂无评论,来抢沙发