关于sort

这篇博客探讨了一个问题,如何在给定的n天内,利用最多k次机会将物品数量翻倍,以最大化销售。每天的物品数量ai和顾客数量bi会影响销售策略。目标是确定最佳翻倍时机,使总销售量达到最大。数据范围限定在1≤n≤105, 0≤k≤n, 0≤ai, bi≤109。输入包括n和k,以及n天的ai和bi。文章旨在找到解决这个问题的算法和策略。" 132969050,20039291,计算机视觉算法详解与应用,"['计算机视觉', '算法', '人工智能']
摘要由CSDN通过智能技术生成
  你是D商店的老板,最近你突然获得了两项超能力:
  1. 预知未来 n 天中 第 i 天所拥有的物品数量 ai 以及 第 i 天要来你商店的顾客人数 bi。

  2. 可以让最多 k 天的物品数量翻一倍。(每一天只能翻一次)


注意:

  • 每位来商店的顾客都会买一件物品。(当天所卖物品的数量 = min(顾客数量,当前物品数量))

  • 第 i 天货物只能在第 i 天卖。

  • 从第一天开始算。


问:身为老板的你,在这 n 天内最多可以卖出多少件物品?


数据范围:


1 ≤ n ≤ 105,

0 ≤ ≤ n ,

0 ≤   ai , bi  ≤ 109


Input

第一行输入 n , k,分别代表未来 n 天,可最多让 k 天的物品翻一倍。

接下来 n 行,第 i 行输入 ai , bi 。分别代表 第 i 天所拥有的货物数量 ai 以及 第 i 天要来你商店的顾客人数 bi。

Output

在这 n 天内最多可以卖出物品的数量

SampleInput 1
4 2
2 1
3 5
2 3
1 5
SampleOutput 1
10可以让 第2天 和 第4天 的物品数量翻一倍。所以物品数量为【2,6,2,2】。总共卖出 1 + 5 + 2 + 2 = 10 件物品。
SampleInput 2
4 1
0 2
0 3
3 5
0 6
SampleOutput 2
5

#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
long long a[200010],b[200010],c[200010],h=0;
int comp(int a,int b)
{
 return a>b;
}
int main()
{
 int n,k,i,j=0;
 scanf("%d %d",&n,&k);
 for(i=1;i<=n;i++)
  {
   scanf("%d %d",&a[i],&b[i]);
   if(a[i]!=0&&b[i]!=0)
   {
    if(a[i]-b[i]>=0)//人不够,物够不需加。
     h+=b[i];
    else
    {
     h+=a[i];
     if(a[i]*2-b[i]>0)
     {
      c[j]=b[i]-a[i];
      j++;
     }
     else
     {
      c[j]=a[i];
      j++;
     }
    }
   } 我的主页
  }
  sort(c,c+j,comp);
  for(i=0;i<k;i++)
   h+=c[i];
  printf("%I64d\n",h);
 return 0;
}
sort算法一般默认为从小到大,否则需要重新定义。sort排列数是开区间,比如你有3个数,你就得sore(a,a+4)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值