3月4日 贪心之《小蓝的礼物》

代码通过贪心策略解决物品购买问题,给定物品价值数组,目标是在有限资源下最大化购买的物品数量。通过比较剩余资源与物品价值和其一半,决定是否购买或部分购买。
摘要由CSDN通过智能技术生成
#include <iostream>
#include<algorithm>
#include<cmath>
const int N=1e5+9;
int a[N];
using namespace std;
int main()
{
  int n,k;cin>>n>>k;
  for(int i=1;i<=n;i++)cin>>a[i];
  sort(a+1,a+1+n);
  int sum=0;
  int nums=0;
  for(int i=1;i<=n;i++)
  {
    
    if(k>=a[i])
    {
      nums++;
      k=k-a[i];
    }
    else if(k<a[i]&&k>ceil(a[i]/2))
    {
      nums++;
      k=k-a[i];
    }
    else break;
  }
  
cout<<nums<<endl;
return 0;


  return 0;
}

这段代码确实是一道关于贪心算法的题目。它描述了一个场景,其中有 � 个物品,每个物品都有各自的价值存储在数组 a 中。现在有一个总共拥有 � 单位资源可以用来“购买”这些物品,目标是最大化购买的物品数量。代码使用了 C++ 语言来实现。

以下是对代码行为的逐步分析:

  1. 定义大小为10e5+9的整型数组 a
  2. 使用命名空间 std,避免每次调用标准库函数时需要前缀 std::
  3. 在 main() 函数定义两个整型变量 n 和 k
  4. 通过循环读入 � 个物品的价值,并存储到数组 a 中。
  5. 使用内置函数 sort 来按升序排列数组中元素(从 a[1] 到 a[n])。
  6. 定义和初始化两个变量:累计消耗资源量 sum 和已购买物品数量 nums
  7. 循环迭代所有物品以决定是否能够购买当前物品:
    • 如果当前剩余资源量 � 大于或等于当前轮询到的物品价值,更新能够购买的商品数并从可用资源中扣除该商品价格。
    • 如果剩余资源不足以全额购买当前商品,但超过该商品价格的一半(向上取整),则仍然增加能购买的商品数并扣除当前商品价格。(可能表示实际使用情境中允许部分支付)
  8. 否则一旦无法继续购买,则退出循环。
  9. 最后打印出可以购买的最大数量。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值