文章

16

粉丝

0

获赞

66

访问

3.5k

头像
可乐 题解:
P1682 中南大学机试题
发布于2025年3月18日 23:05
阅读数 198

首先进行分析题意,明显需要采用贪心的思想,此题的难点在于用单价最低的可乐进行购买可能不能凑整,此时有两种情况,一种是用单价最便宜的再买一瓶凑整,另一种是用其他各种单价的进行凑整,所以我们每次都需要进行比较。故我们首先先用最低单价去买,若能凑整则肯定为最优解,若不能凑整则我们进入两种情况的比较,①多买一瓶(此时未必最便宜)用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...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发