热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

codefoces812C-SagheerandNubianMarket心得

题目描述:OnhistriptoLuxorandAswan,SagheerwenttoaNubianmarkettobuysomesouvenirsforh

题目描述:

  On his trip to Luxor and Aswan, Sagheer went to a Nubian market to buy some souvenirs for his friends and relatives. The market has some strange rules. It contains n different items numbered from 1 to n. The i-th item has base cost ai Egyptian pounds. If Sagheer buys kitems with indices x1, x2, ..., xk, then the cost of item xj is axj + xj·k for 1 ≤ j ≤ k. In other words, the cost of an item is equal to its base cost in addition to its index multiplied by the factor k.

  Sagheer wants to buy as many souvenirs as possible without paying more than S Egyptian pounds. Note that he cannot buy a souvenir more than once. If there are many ways to maximize the number of souvenirs, he will choose the way that will minimize the total cost. Can you help him with this task?

输入描述:

The first line contains two integers n and S (1 ≤ n ≤ 105 and 1 ≤ S ≤ 109) — the number of souvenirs in the market and Sagheer's budget.

The second line contains n space-separated integers a1, a2, ..., an (1 ≤ ai ≤ 105) — the base costs of the souvenirs.

输出描述:

On a single line, print two integers kT — the maximum number of souvenirs Sagheer can buy and the minimum total cost to buy these ksouvenirs.

样例输入1:

3 11

2 3 5

样例输出1:

2 11

样例输入2:

4 100

1 2 5 6

样例输出2:

4 54

样例输入3:

1 7

7

样例输出3:

0 0

题目大意:

你只带了m元钱去市场买东西,市场有n件物品,每一件物品的基本价格为a1,a2,....an,而当你最终决定买k件物品时,每一件物品的价格还得在基本价格上加上i * k元,其中,i为物品的下标,k是可以变得,现在你的任务是,尽量购买多一点物品,当购买物品数量一样的方法有很多的情况下,使花的价格最少。

输入解释:

输入两行。

第一行为两个整数,第一个整数为市场上物品的总数量,第二个整数为你的预算

第二行为这n件物品的基本价格

输出解释:

输出两个证整数,第一个整数为你能购买物品的最大数量,第二个整数为购买这个数量的物品所花的最少价格。

题目分析:

这道题目既然是让我们找最大数量,我们就很容易的想到需要二分答案,而二分的标准是啥?自购买物品的数量,然是数量,我们可以这样想:假设k为我们最终我们购买物品的数量,那么0<=k<=n,我们只需要不断二分k,再在当数量为k的时候去购买价格最低的k件物品,如果预算可以购买这k件物品,就代表这个数量可行,我们保存这个结果,然后从k+1数量到n数量继续二分,否则,我们从0数量到k-1数量二分找可行的数量。分析到这里,思路应该就出来了吧?下面上代码:

#include
#include
#include
using namespace std;
const long long  int N = 100001;
long long int a[N],b[N],n,m,sum = 0;
//假设买k件物品
long long int Find(long long int k)
{
    long long int i,j;
    //printf ("购买%lld件物品时:\n",k);
    sum = 0;

//将数量为k时每一件物品的价格保存起来再排序
    for (i = 1; i <= n; i++)
    {
        b[i] = a[i] + i * k;
    }
    sort(b + 1,b + n + 1);

//选择数量为k时价格最小的k件物品购买
    for (i = 1; i <= k; i++)
    {
        //printf ("%lld\n",i);
        sum += b[i];
        //printf ("够买第%lld件物品已经花费%lld元\n",i,sum);

//当购买这k件物品时预算不够了,代表不能购买这么多数量的物品,返回0
        if(sum > m)
        {
            return 0;
        }
    }

//可以购买数量为k的物品,返回1
    return 1;

}
int main(void)
{
    long long int i,j,low,high,mid,mid1,sum1,sum2 = 0;
    scanf ("%lld%lld",&n,&m);
    for (i = 1; i <= n; i++)
    {
        scanf ("%lld",&a[i]);
        //printf ("第%lld件物品价格:%lld\n",i,a[i]);
    }
    low = 0;
    high = n;

//在0-n中二分数量
    while (low <= high)
    {
        mid = low + (high - low) / 2;
        sum1 = Find(mid);

//如果可以购买mid数量的物品,保存mid和sum,然后从mid+1-n二分答案
        if(sum1)
        {
            sum2 = sum;
            mid1 = mid;
            low = mid + 1;
            //printf ("%lld %lld\n",mid1,sum1);
        }

//否则从0-mid-1二分可购买的数量
        else
        {
            //printf ("不能购买%lld件物品\n",mid);
            high = mid - 1;
        }
    }

//输出最终的mid1和sum2
    printf ("%lld %lld\n",mid1,sum2);

    return 0;
}

//心得:当涉及到最大或者最小的问题时,我们都应该联想到二分,二分这个算法真的是非常实用的一个算法,在刷二分题目的过程中我也确实对二分有了更加深入的理解。

 


推荐阅读
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
author-avatar
wonderoil
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有