HackerRank - greedy-florist 【贪心】

题意

有N个人 要去买K朵花。老板为了最大化新顾客的数量。就压榨回头客。每一朵花都有一个基本价格。一个顾客买下这朵花的价格是他来这里买的次数 * 基本价格 打个比方 如果一个顾客第一次来买 它来买的次数就是1,然后求这N个人买下这K朵花最少需要花多少钱。K朵花必须全部买下来,而且每种价格的花只有一种。

思路

如果 N >= K 那么 就直接对K多花的基本价格求和就可以了。 如果 N < K, 那么我们要充分利用每个客户的购买次数。就比如有 6 朵花,3 个人。那么 我们就要每个人买两次 就可以了。 如果 K 对 N 不能整除。 比如 5朵花, 3个人。 那么我们就用 5 / 3 = 1 (整数除法) 就有三个人 买一次,两个人买两次。然后买的次数少的 用来买基本价格多的,买的次数多的 用来买基本价格小的 就是典型的贪心做法。

AC 代码

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<string>
#include<sstream>
#include<set>
#include<map>
#include<vector>
#include<queue>
#include<stack>
#include<numeric>
using namespace std;
const int MAX = 0x3f3f3f3f;
const int MIN = 0xc0c0c0c0;
const int maxn = 1e2 + 5;
int pri[maxn];
int main()
{
int n, k;
scanf("%d%d", &n, &k);
if (n <= k)
{
int num;
int tot = 0;
while (n--)
{
scanf("%d", &num);
tot += num;
}
cout << tot << endl;
}
else
{
int tot = 0;
int i, j, l;
for (i = 0; i < n; i++)
scanf("%d", &pri[i]);
sort(pri, pri + n);
int a = n / k;
int b = n % k;
i = 0;
int flag = (n - b) / a;
while (b--)
tot += pri[i++] * (a + 1);
for (j = a; j >= 1; j--)
{
for (l = 0; l < flag; l++)
tot += pri[i++] * j;
}
cout << tot << endl;
}
}

HackerRank - greedy-florist 【贪心】的更多相关文章

  1. HackerRank - candies 【贪心】

    HackerRank - candies [贪心] Description Alice is a kindergarten teacher. She wants to give some candie ...

  2. HDU 4976 A simple greedy problem. 贪心+DP

    题意: 给定n<=1000个小兵,A每次都能使小兵掉1点血,B每次能使所有小兵掉1点血,A.B轮流攻击,每次轮到A他会选择是否攻击,轮到B必须攻击.求A最多能杀死多少小兵.(当小兵血量为1时被攻 ...

  3. 集束搜索beam search和贪心搜索greedy search

    贪心搜索(greedy search) 贪心搜索最为简单,直接选择每个输出的最大概率,直到出现终结符或最大句子长度. 集束搜索(beam search) 集束搜索可以认为是维特比算法的贪心形式,在维特 ...

  4. 算法(贪心|BF|KMP)

    贪心算法 前置知识 const Greedy = num => { //贪心 let arr = [100, 20, 10, 5, 2, 1] let count = 0; for (let i ...

  5. Introducing Regular Expressions 学习笔记

    Introducing Regular Expressions 读书笔记 工具: regexbuddy:http://download.csdn.net/tag/regexbuddy%E7%A0%B4 ...

  6. 省钱加油(Fuel Economy)题解

    题目 农夫约翰决定去做一个环游国家旅行,为了不让他的奶牛们感到孤单,于是他决定租一辆货车带领他的奶牛们一起去旅行.这辆货车的油箱最多可以承载G 个单位的油,同时为了简化问题,规定每一个单位的油可以行使 ...

  7. Python Web-第二周-正则表达式(Using Python to Access Web Data)

    0.课程地址与说明 1.课程地址:https://www.coursera.org/learn/python-network-data/home/welcome 2.课程全名:Using Python ...

  8. xgboost入门与实战(原理篇)

    sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campai ...

  9. codeforcess水题100道

    之所以在codeforces上找这100道水题的原因是为了巩固我对最近学的编程语言的掌握程度. 找的方式在codeforces上的PROBLEMSET中过的题最多的那些题里面出现的最前面的10个题型, ...

随机推荐

  1. 【ML】有偏样本解决方案

    占个位置,得空写文章. From:learning-from-imbalanced-data

  2. 详谈JavaScript 匿名函数及闭包

    1.匿名函数函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途.匿名函数:就是没有函数名的函数. 1.1 函数的定义,首先简单介绍一下函数的定义,大致可分为三种方式 第一种:这 ...

  3. java 反序列化漏洞检测及修复

    Jboss.Websphere和weblogic的反序列化漏洞已经出来一段时间了,还是有很多服务器没有解决这个漏洞: 反序列化漏洞原理参考:JAVA反序列化漏洞完整过程分析与调试 这里参考了网上的 J ...

  4. RESTful作用与特性

    最近在项目中要使用rest风格的设计,学习了一下. 知乎网友说的一句话精确的解释了REST: URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作-(https://ww ...

  5. GSAP 官方文档(结贴)

    好久没写GSAP的教程的(其实我也不懂哈哈),国内也没什么人用,不对动画要求特别高的话,其实也没必要用GSAP,现在工作上没用到这个东西,也懒得写了,所以有问题的话去找一下greensock的官方文档 ...

  6. shell脚本学习总结04--终端信息的获取和设置

    tput tput 命令将通过 terminfo 数据库对您的终端会话进行初始化和操作.通过使用 tput,您可以更改几项终端功能,如移动或更改光标.更改文本属性,以及清除终端屏幕的特定区域. 文本属 ...

  7. excel如何将一个工作薄中的工作表生成独立的工作薄

    excel如何将一个工作薄中的工作表生成独立的工作薄  '用vba代码 Sub 另存所有工作表为工作簿() Dim sht As Worksheet Application.ScreenUpdatin ...

  8. 《从零开始学Swift》学习笔记(Day 69)——Swift与Objective-C混合编程之语言

    原创文章,欢迎转载.转载请注明:关东升的博客 在Swift语言出现之前,开发iOS或OS X应用主要使用Objective-C语言,此外还可以使用C和C++语言,但是UI部分只能使用Objective ...

  9. The Personal Touch Client Identification 个性化接触 客户识别

    w服务器要知道和谁在交谈. HTTP The Definitive Guide Web servers may talk to thousands of different clients simul ...

  10. nodejs(三)下之mangoDB

    mongoDB 简介 一.什么是MongoDB ? 1.MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能. 2.Mo ...