1671.扑克牌

信息学奥赛一本通高手训练题解目录 第1部分 基础算法(高手训练)-->第1章 贪心算法 1.1.1 扑克牌 1.1.2游戏通关 1.1.3楼间跳跃 1.1.4堆蛋糕 1.1.5塔 第1部分 基础算法(高手训练)-->第2章 二分与三分 每日更新,未完待续 阅读详情

信息学奥赛一本通 贪心算法

【题目描述】


一副扑克牌有n张普通牌加一张特殊牌
现在n种牌各有a1 , a2 , … , an张,还有 b bb 张特殊牌
一副牌可以由n种普通牌各一张组成,也可以由n−1种普通牌各一张再加一张特殊牌组成
输出最多能整理出的牌的副数。

【输入】


第一行给出n和b。
第二行给出a1,a2,…,an。

【输出】


输出最多能整理出的牌的副数。

【数据】


对于20%的数据,1≤n≤100,牌的数量小于100。
对于40%的数据,1≤n≤3000。
对于100%的数据,1≤n≤1000000,牌的数量 ≤10^{6}。
时间限制: 1000ms
内存限制: 262144KB

【输入样例】

5 5
5 5 5 5 5

【输出样例】

6

【分析】

题目描述不是太好理解,现在对样例数据进行一个解读。5种牌分别各有5张,就以1、2、3、4、5来表示,即1有5张,2有5张……那么答案的6副牌是什么样的呢,我用表格来表示,每一行表示一副牌,其中T表示特殊牌。

T2345
1T345
12T45
123T5
1234T
12345

补充一个样例:

5 5

5 1 2 3 4

答案:3

也是五种牌,每种牌的数量不相同了,需要先对牌的数量进行一个排序,表格中上面三行对应答案的3副牌。

T2345
T2345
1T345
45
5

题目适用于贪心来解题,调整几种牌中数量最小的那个。补充样例中,不使用特殊牌,只能凑出1副牌(1,2,3,4,5),将特殊牌补充到1里,可以凑出2副牌(T,2,3,4,5 / 1,2,3,4,5),再将特殊牌补充到1、2各一个,可以凑出3副牌,如上面表格所示。那么可以继续添加特殊牌吗?再添加一个T到1、2、3中一列,还有两个空无法填充,即用了4个特殊牌也只能凑出3副牌。

补充特殊牌退出条件有两个:

1、使用特殊牌的数量大于能凑出的牌数,即大于队列中最小的那个数,如补充例子里展示的那样

2、特殊牌用完了

#include<bits/stdc++.h>
using namespace std;
int n,b;
//优先队列
priority_queue <int, vector<int>,greater<int>> q;
int ans;
int main() {
    cin>>n>>b;
    for(int i=1;i<=n;i++){//优先队列保存n张牌
        int a;
        cin>>a;
        q.push(a);
    }
    ans=q.top();//记录最初可以凑出的牌数
    for(int i=1;i<=b;i++){//将特殊牌补充到队列里
        int t = q.top();
        q.pop();
        t++;//加到最少的那种牌里
        q.push(t);//补充后放回队列
        ans=q.top();//当前最少的牌数,即当前可凑出的牌数
        if (i>ans){//如果使用的特殊牌超过了整副牌数量,表示无法再凑出更多的牌数了
            break;
        }
    }
    cout<<ans;//输出答案
    //cout << q.top()
    return 0;
}

从游戏设计视角解析贪心算法:如何用《扑克牌》和《游戏通关》题解优化玩家体验 本文从游戏设计视角解析贪心算法的应用,通过《扑克牌》和《游戏通关》两个案例,展示如何利用贪心算法优化玩家体验。文章详细探讨了贪心算法在资源分配、难度曲线设计和策略深度中的实际应用,为游戏开发者提供了实用的设计思路和代码示例,帮助提升游戏的即时反馈和策略直观性。 阅读详情

相关推荐

ESP32S3与ILI9341 LCD屏LVGL移植实战:从零构建嵌入式GUI界面

本文详细介绍了如何在ESP32S3平台上移植LVGL图形库并驱动ILI9341 LCD屏幕,从硬件选型、开发环境配置到显示驱动实现和内存优化。通过实战案例讲解移植过程中的关键步骤和常见问题解决方案,帮助开发者快速构建嵌入式GUI界面。

h9j8k7l6m5n的博客 1097

贪心·1671扑克牌

题目大意 一副扑克牌有nnn张普通牌加一张特殊牌 现在nnn种牌各有a1,a2,…,ana1,a2,…,ana1,a2,…,an张,还有 bbb 张特殊牌 一副牌可以由n种普通牌各一张组成,也可以由n−1种普通牌各一张再加一张特殊牌组成 输出最多能整理出的牌的副数。 输入 第一行给出nnn和bbb。 第二行给出a1,a2,…,ana1,a2,…,ana1,a2,…,an。 输出 输出最多能整理...

qyxpsx7的博客 1566

C#实战:如何用TSCLIB.dll实现TSC打印机的状态监控与异常处理(附完整代码)

本文详细介绍了如何利用C#和TSCLIB.dll构建企业级TSC打印机状态监控与智能异常处理系统。通过解析十六进制状态码、设计高可靠性的轮询引擎以及实现事件驱动的报警机制,开发者可以打造一个稳定、可观测的打印服务,有效保障物流仓储、生产制造等高频打印场景的业务连续性。

weixin_29227585的博客 64

【贪心】ybtoj1671扑克牌

1671:扑克牌 时间限制: 1000 ms 内存限制: 262144 KB 【题目描述】 一副扑克牌有n张牌。一般你买的一副新扑克牌里除了这n张牌外还会有一些张特殊的牌,如果你不小心弄丢了nn张牌中的某一张,就可以用特殊牌来代替,但是如果你弄丢两张的话就没有办法了,因为特殊牌上的图案是一样的。 现在你得到了很多扑克牌,准确来说,n种牌你各有a1,a2,…,an张,同时你还有b张特殊牌,现在你需要从这些牌中整理出若干副牌供大家使用。整理出的一副牌可以由nn种普通牌各一张组成,也可...

andyc_03的博客 924

在MacBook上直接跑Windows Server 2022:一个开发者的真实踩坑与配置全记录

本文详细记录了在MacBook上原生运行Windows Server 2022的完整流程与优化技巧。通过Boot Camp实现非虚拟机安装,开发者可以充分利用Mac硬件性能,搭建高效的本地开发环境,特别适合需要测试跨平台应用和服务器功能的场景。文章涵盖驱动处理、分区策略、Docker配置等关键步骤,为技术极客提供实用指南。

weixin_42620913的博客 245

从INCA到Excel:手把手教你移植汽车标定数据的查表插值算法(附源码)

本文详细介绍了如何将汽车标定数据从INCA平台移植到Excel,实现查表插值算法的完整迁移。通过解析INCA MAP数据结构,设计Excel环境下的双线性插值算法,并提供VBA和C#两种实现方案,帮助工程师高效处理标定数据。文章包含实用代码示例和性能优化技巧,适用于ECU开发与标定场景。

weixin_29313239的博客 409

信息学奥赛一本通高手训练 1671:扑克牌 贪心算法

整理出的一副牌可以由n种普通牌各一张组成,也可以由n−1种普通牌各一张再加一张特殊牌组成。一般你买的一副新扑克牌里除了这n张牌外还会有一些张特殊的牌,如果你不小心弄丢了n张牌中的某一张,就可以用特殊牌来代替,但是如果你弄丢两张的话就没有办法了,因为特殊牌上的图案是一样的。解析:用特殊牌补最少的牌,又因为特殊牌一副牌中只能有一张,所以使用的特殊牌数量不能超过答案。对于100%的数据,1≤n≤1000000,牌的数量≤10^6。对于20%的数据,1≤n≤100,牌的数量小于100。输出最多能整理出的牌的副数。

长春高老师编程 1106

AGV避坑指南:海康控制系统与Modbus设备对接的那些‘坑’

本文深入解析海康AGV控制系统与Modbus设备对接中的常见问题及解决方案,涵盖通信协议对接、信号干扰、硬件层问题和软件优化策略。通过真实案例和实用技巧,帮助工程师规避典型陷阱,提升系统稳定性和效率。

l3m4n的博客 740

C++扑克牌发牌游戏程序(包括C++随机数的解释)

C++产生随机数 1.C++中没有自带的random函数,要实现随机数的生成就需要使用rand()和srand()。 2.函数rand()是真正的随机数生成器,而srand()会设置供rand()使用的随机数种子。如果你在第一次调用rand()之前没有调用srand(),那么系统会为你自动调用srand()。而使用同种子相同的数调用 srand()会导致相同的随机数序列被生成。srand((...

CX的博客 5415

使用Python的OpenCV库进行三维重建点云

通过这些步骤,我们可以使用Python的OpenCV库进行三维重建,并生成对应的点云。当然,这只是一个简单的示例,实际的三维重建可能涉及更多的图像处理和计算步骤。在计算机视觉领域,三维重建是一项重要的任务,它可以将多个二维图像或视频序列转换为三维场景模型。在本文中,我们将介绍如何使用Python的OpenCV库进行三维重建,并生成相应的点云。以上是使用Python的OpenCV库进行三维重建点云的简要介绍和示例代码。最后,我们可以将计算得到的三维点云可视化。安装完成后,我们可以开始编写代码。

AuSwift的博客 1646

17、深入分析Freebase数据集:特征、挑战与类型系统构建

本文深入分析了Freebase数据集的特征、数据建模的挑战以及类型系统的构建方法。Freebase作为知识图谱的重要资源,以RDF三元组形式提供了丰富的结构化知识。文章重点探讨了反向三元组、中介节点(CVT节点)以及非主题三元组对链接预测任务的影响,并通过实验展示了不同类型处理策略对模型性能的作用。此外,文章详细介绍了如何构建一个显式的类型系统,以提升链接预测的准确性,并展望了未来可能的研究方向。

css33的专栏 287

面试题44:扑克牌的顺子

学习了一段时间《剑指offer》现在做了一些笔试,现在陆续把笔记上传到博客,方便自己及他人上网查看。           题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的,2-10为数字本身,A为1,J=11,Q=12,K=13;而大小王可以看成任意数字。 思路:大小王是特殊的数字,把它设置为0.接下来分为三个步骤         1、首先把数组排序;    

AlphaGQ 478

【ArcGIS微课1000例】0118:一文讲清楚tif(geotiff)栅格数据格式

TIFF(Tagged Image File Format)是一种常见的图像文件格式,它被广泛用于存储和传输各种类型的图像数据。图像存储:TIFF格式可以存储多通道的位图图像,包括灰度图、彩色图和透明度图等。它支持不同的像素深度,可以是8位、16位、24位或32位等。因此,TIFF格式非常适合存储高质量的图像数据,包括照片、卫星图像、医学影像等。无损压缩:TIFF格式支持无损压缩,这意味着图像可以被压缩而无需损失任何像素信息。这种压缩方式可以减小文件大小,而不会降低图像的质量。

智慧空间实验室 2819

1671:扑克牌

这篇C++代码实现了一个卡牌游戏算法,用于计算使用特殊牌后的最小牌数。程序读取n张初始牌和b张特殊牌,通过小根堆维护牌堆,每次将最小牌数加1(使用特殊牌),直到特殊牌用完或当前最小牌数超过剩余特殊牌数。最终输出处理后的最小牌数,表示整副牌的数量。算法时间复杂度为O(n + b log n),利用优先队列高效维护最小值。

lin4591321的博客 213

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

hihoCoder 1159 扑克牌 (dp,难)

题意: 一副不含王的扑克牌由52张牌组成,由红桃、黑桃、梅花、方块4组牌组成,每组13张不同的面值。现在给定52张牌中的若干张,请计算将它们排成一列,相邻的牌面值不同的方案数。 牌的表示方法为XY,其中X为面值,为2、3、4、5、6、7、8、9、T、J、Q、K、A中的一个。Y为花色,为S、H、D、C中的一个。如2S、2H、TD等。 题解: 对应每个排有4中类型 dp[a][b

ACM之梦 1328

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【细节】剑指offer——面试题44:扑克牌顺子

剑指offer——面试题44:扑克牌顺子 思路关键:这副扑克共有56张 class Solution { public: bool IsContinuous( vector&amp;lt;int&amp;gt; numbers ) { //此幅牌共56张,13*4 + 2 + 2 = 56 set&amp;lt;int&amp;gt; kind_no_zero; int num_of_...

Allenlzcoder的博客 407

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

(一本通_高手训练)扑克牌

扑克牌 【题目描述】 一副扑克牌有n张牌。一般你买的一副新扑克牌里除了这n张牌外还会有一些张特殊的牌,如果你不小心弄丢了n张牌中的某一张,就可以用特殊牌来代替,但是如果你弄丢两张的话就没有办法了,因为特殊牌上的图案是一样的。 现在你得到了很多扑克牌,准确来说,nn种牌你各有a1,a2,…,an张,同时你还有b张特殊牌,现在你需要从这些牌中整理出若干副牌供大家使用。整理出的一副牌...

weixin_30836759的博客 476

B1816 扑克牌 二分答案 + 贪心

这个题我一开始想到了二分答案,但是去写了另一个算法,用优先队列直接模拟,最后GG了。。。因为我没考虑每个套牌只能有一个joker。。。尴尬。 后来二分答案,然后暴力验证就行了。 题干: Description 你有n种牌,第i种牌的数目为ci。另外有一种特殊的牌:joker,它的数目是m。你可以用每种牌各一张来组成一套牌,也可以用一张joker和除了某一种牌以外的其他牌各一张组成1套牌...

weixin_30381317的博客 257

2019.6.10 一场毒瘤的考试【including 入门OJ·poker,工业时代

初见安~这次卡过了200的门槛!立个Flag! Poker 传送门:入门OJ P2046 Description 一副扑克牌有n张牌。一般你买的一副新扑克牌里除了这n张牌外还会有一些张特殊的牌,如 果你不小心弄丢了n张牌中的某一张,就可以用特殊牌来代替,但是如果你弄丢两张的话就 没有办法了,因为特殊牌上的图案是一样的。 现在你得到了很多扑克牌,准确来说,n种牌你各有a1、a2、……、an张...

樱狸✨愿携清风归来处 529

第六节----集合(set)

6.1  设值         Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。         可以将Redis中的Set理解为Java中的HashSet集合。         设值语法:SADD  SetName  Key DEL   mySet SADD   mySet   valueA SADD   mySet ...

大宇的博客,欢迎访问 435

重走长征路---OI每周刷题记录---4月19日  2014

总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做。2018-11-28 重走长征路---OI每周刷题记录---4月19日  2014 本周共计 题+题 测评地址: 计算几何:「poj1410」Intersection 「poj2826」An Easy Problem?! 「poj103...

mrcrack的博客 377

信息学奥赛一本通高手训练 题解目录

1681 统计方案 1682 最小字典序 1683 稗田阿求 1684 翻转序列 1685 新版方格取数。1686 最小操作次数 1687 积水问题 1688 最优路径 1689 堆排问题 1690 棋盘问题。1676 手机游戏 1677 软件开发 1678 独木桥 1679 子集 1680 序列。

长春高老师编程 1389

C++扑克牌类的设计

C++扑克牌 1、设计扑克类Card:主要属性有花色和点数;主要方法有初始化、输出、比较大小等 2、设计一副扑克牌类Cards:主要属性包括扑克对象数组;主要方法有初始化、洗牌、输出等。 3、编写测试程序。 #include <iostream> #include <string> #include <vector> #include <ctime>...

liulicuican的博客 6834

【信息学奥赛一本通——高手训练】扑克牌 | 贪心、堆

题目大意: 一副扑克牌有nn张牌。一般你买的一副新扑克牌里除了这nn张牌外还会有一些张特殊的牌,如果你不小心弄丢了nn张牌中的某一张,就可以用特殊牌来代替,但是如果你弄丢两张的话就没有办法了,因为特殊牌上的图案是一样的。 现在你得到了很多扑克牌,准确来说,nn种牌你各有a1,a2,…,ana1,a2,…,an张,同时你还有b张特殊牌,现在你需要从这些牌中整理出若干副牌供大家使用。整理出的一副牌可以由nn种普通牌各一张组成,也可以由n−1n−1种普通牌各一张再加一张特殊牌组成。 请你设计出一种方案,整理

一只酷酷光儿的博客 1272

LintCode 33. N皇后问题

这个代码几乎是看的九章的答案,写的是真的好,个个变量函数的命名确实有感觉,用一个List同时表示行和列非常巧妙 import org.junit.Test; import java.util.ArrayList; import java.util.List; public class SolveNQueens { /** * @param n: The number of ...

维 348
下一篇: 1423. 种树
mapleleafcn
博客等级 码龄16年 55粉丝 15原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值