当前位置: 首页 > article >正文

题解:洛谷 P2540 [NOIP 2015 提高组] 斗地主 加强版

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。欢迎大家订阅我的专栏算法题解C与Python实现附上汇总贴算法竞赛备考冲刺必刷题C | 汇总【题目来源】洛谷P2540 [NOIP 2015 提高组] 斗地主 加强版 - 洛谷【题目描述】牛牛最近迷上了一种叫斗地主的扑克游戏。斗地主是一种使用黑桃、红心、梅花、方片的A AA到K KK加上大小王的共54 5454张牌来进行的扑克牌游戏。在斗地主中牌的大小关系根据牌的数码表示如下3 4 5 6 7 8 9 10 J Q K A 2 小王 大王 345678910JQKA2\text{小王}\text{大王}345678910JQKA2小王大王而花色并不对牌的大小产生影响。每一局游戏中一副手牌由n nn张牌组成。游戏者每次可以根据规定的牌型进行出牌首先打光自己的手牌一方取得游戏的胜利。现在牛牛只想知道对于自己的若干组手牌分别最少需要多少次出牌可以将它们打光。请你帮他解决这个问题。需要注意的是本题中游戏者每次可以出手的牌型与一般的斗地主相似而略有不同。具体规则如下在此题中认为两个王不能组成对子牌。【输入】第一行包含用空格隔开的2 22个正整数T , n T,nT,n表示手牌的组数以及每组手牌的张数。接下来T TT组数据每组数据n nn行每行一个非负整数对a i , b i a_i,b_iai​,bi​表示一张牌其中a i a_iai​表示牌的数码b i b_ibi​表示牌的花色中间用空格隔开。特别的我们用1 11来表示数码A AA11 1111表示数码J JJ12 1212表示数码Q QQ13 1313表示数码K KK黑桃、红心、梅花、方片分别用1 − 4 1-41−4来表示小王的表示方法为0 1大王的表示方法为0 2。【输出】共T TT行每行一个整数表示打光第i ii手牌的最少次数。【输入样例】1 8 7 4 8 4 9 1 10 4 11 1 5 1 1 4 1 1【输出样例】3【算法标签】#省选# #IDA*#【代码详解】#includebits/stdc.husingnamespacestd;constintN30;// 牌面值种类数量intt,n;// t: 测试用例数量, n: 每手牌的数量intf[N][N][N][N];// 记忆化数组f[s][t][j][z]表示在给定牌型下的最小出牌次数intwasd[4]{0,5,3,2};// 不同牌型的最小连续长度单顺5张双顺3对飞机2个三张inta[N];// 统计每种牌的数量a[i]表示牌面值为i的牌有多少张intb[N];// 牌型转换数组b[1]单牌数b[2]对子数b[3]三张数b[4]炸弹数// 辅助函数返回两个整数中的较小值intcmp(inta,intb){returnab?a:b;}// 深度优先搜索函数计算在给定基本牌型下的最小出牌次数// 参数说明// s: 单牌的数量// t: 对子的数量// j: 三张的数量// z: 炸弹的数量intdfs(ints,intt,intj,intz){// 如果这个状态已经计算过直接返回结果if(~f[s][t][j][z]){returnf[s][t][j][z];}intans1e9;// 初始化为一个很大的数// 策略1拆分对子为两个单牌if(t){anscmp(ans,dfs(s2,t-1,j,z));}// 策略2拆分三张为一个对子和一个单牌if(j){anscmp(ans,dfs(s1,t1,j-1,z));}// 策略3拆分炸弹为一个三张和一个单牌if(z){anscmp(ans,dfs(s1,t,j1,z-1));}// 策略4拆分炸弹为两个对子if(z){anscmp(ans,dfs(s,t2,j,z-1));}// 策略5三带一用三张带一个单牌if(js){anscmp(ans,dfs(s-1,t,j-1,z)1);}// 策略6三带二用三张带一个对子if(jt){anscmp(ans,dfs(s,t-1,j-1,z)1);}// 策略7四带二单用炸弹带两个单牌if(zs1){anscmp(ans,dfs(s-2,t,j,z-1)1);}// 策略8四带二对用炸弹带两个对子if(zt1){anscmp(ans,dfs(s,t-2,j,z-1)1);}// 策略9一手出完所有牌每个单牌、对子、三张、炸弹都单独出returnf[s][t][j][z]cmp(ans,stjz);}// 处理顺子、连对、飞机等特殊牌型// 参数说明step - 当前已经出的次数intchupai(intstep){intans1e9;// 初始化为一个很大的数inttot;// 用于统计连续牌的数量// 处理三种特殊牌型k1单顺k2双顺k3飞机for(intk1;k3;k){// 从3开始遍历因为顺子从3开始3,4,5,...for(inti3;i14;i){tot0;// 统计从i开始最多有多少张连续的牌for(intji;j14;j){if(a[j]k)// 如果当前牌有至少k张{tot;}else{break;// 不连续了停止统计}}// 枚举所有可能的顺子长度for(intjiwasd[k]-1;jitot-1;j){// 移除这个顺子for(intli;lj;l){a[l]-k;}// 递归处理剩下的牌anscmp(ans,chupai(step1));// 恢复这个顺子进行回溯for(intli;lj;l){a[l]k;}}}}// 统计剩余的牌型b[1]b[2]b[3]b[4]0;// 初始化牌型数组for(inti2;i14;i)// 从2到A14统计{b[a[i]];// 根据牌的数量统计牌型}// 处理大小王if(a[0]2)// 如果有两张王大小王{// 可以当作一对王炸anscmp(ans,step1dfs(b[1],b[2],b[3],b[4]));}// 将王当作单牌处理b[1]a[0];anscmp(ans,stepdfs(b[1],b[2],b[3],b[4]));returnans;}intmain(){// 输入测试用例数量和每手牌的数量cintn;// 初始化记忆化数组memset(f,-1,sizeof(f));f[0][0][0][0]0;// 基础情况没有牌需要0次出牌// 处理每个测试用例while(t--){intu,v;// u: 牌面值, v: 花色memset(a,0,sizeof(a));// 清空牌数统计// 输入n张牌for(inti1;in;i){cinuv;a[u];// 统计该牌面值的数量}// 将A1映射到14便于处理顺子a[14]a[1];// 计算最少出牌次数并输出coutchupai(0)endl;}return0;}【运行结果】1 8 7 4 8 4 9 1 10 4 11 1 5 1 1 4 1 1 3

相关文章:

题解:洛谷 P2540 [NOIP 2015 提高组] 斗地主 加强版

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大…...

AI大模型学习指南:小白也能掌握的AI核心技能,收藏这份干货!

本文深入浅出地介绍了AI的概念、核心目标及四大研究领域,包括基础设施建设、算法研发、主要技术方向和行业解决方案。文章详细阐述了各领域代表公司及优质岗位,并特别针对算法岗位的学习路径进行了指导,帮助读者了解AI技术全貌,为…...

0.4 阅读本专栏的前置知识与环境搭建指南

摘要: 本篇从"知识准备"和"环境搭建"两个维度,帮助读者评估自身的阅读准备度,并搭建一个可编译、可调试、可运行 libhsakmt 的本地环境,为后续各章的源码级分析打下基础。 1. 前置知识体系 阅读本专栏不需要…...

播丫科技AI数字人直播:赋能实体商家,解锁线上引流新密码

播丫科技AI数字人直播:赋能实体商家,解锁线上引流新密码实体生意竞争加剧,线上增量已成为实体店生存发展的必争之地。购物中心、工厂等实体业态虽有线下实景优势,却普遍面临“想做直播却请不起主播、不会运营”的困境,…...

异步编程的发展

线程的终结 早年写服务端,逻辑很简单:一个请求一个线程。 用户 A 请求 → 创建线程 A → 查数据库 → 返回结果 用户 B 请求 → 创建线程 B → 查数据库 → 返回结果代码写起来像同步程序一样自然——因为它本来就是同步的。你不需要关心什么异步、回调、…...

GPT-5.5发布解读,从Benchmark到Agent执行能力看它强在哪

GPT-5.5 发布之后,很多开发者第一反应是两句:“又贵了”和“好像真强了”。如果只看这两个结论,其实不够。 从技术视角看,GPT-5.5 这次真正值得拆的,不只是模型分数,而是它在 Agent 执行能力上的变化。Open…...

Qwen-Image 从推理到 LoRA 训练实战教程(AMD GPU × DiffSynth-Studio)

Qwen-Image 从推理到 LoRA 训练实战教程(AMD GPU DiffSynth-Studio) 原文作者:段忠杰,魔搭社区 本课程由魔搭社区 ModelScope 出品,通过实战教程深入讲解如何在 AMD GPU 环境下,结合开源框架DiffSynth-Stu…...

AMD Hummingbird-XT: 面向消费端的高性能视频生成算法

AMD Hummingbird-XT: 面向消费端的高性能视频生成算法 原文作者:Takashi Isobe, He Cui, Mengmeng Ge, Dong Zhou, Dong Li, KuanTing Lin, Chandra Yang, Wickey Wang, Emad Barsoum. 引言 随着近些年扩散模型的出现与快速发展[1],视频生成算法在分辨…...

福利|110万美元奖金池!AMD E2E SpeedRun火力全开,等你刷新推理榜单!

福利|110万美元奖金池!AMD E2E SpeedRun火力全开,等你刷新推理榜单! 原文作者:George Wang, Daniel Huang, Guru Madagundapaly Parthasarathy, AI Group我们宣布正式启动由AMD 赞助的百万美金奖金池「GPU MODE E2E Sp…...

Unity UI粒子特效完整解决方案:高效实现专业级视觉效果

Unity UI粒子特效完整解决方案:高效实现专业级视觉效果 【免费下载链接】ParticleEffectForUGUI Render particle effect in UnityUI(uGUI). Maskable, sortable, and no extra Camera/RenderTexture/Canvas. 项目地址: https://gitcode.com/gh_mirrors/pa/Partic…...

三步快速对接 gpt-image-2 图像生成 API 教程

前言 gpt-image-2 是当下高性能 AI 图像生成模型,支持自定义尺寸、风格定制、批量生成等能力,接口规范完全标准化、兼容主流开发生态。 本文基于官方 Apifox 接口文档,以 https://api.aaigc.top 为统一请求域名,整理极简三步对接…...

InkOS:基于多Agent协作与长期记忆的AI小说创作系统深度解析

1. 项目概述:一个能自主写小说的AI Agent如果你对AI写作的印象还停留在“输入一句话,生成一段文”的简单工具,那么InkOS可能会颠覆你的认知。这不是一个玩具,而是一个拥有完整创作管线、具备长期记忆和自主审计能力的“小说创作AI…...

终极指南:Switch大气层系统1.7.1完整安装与功能解锁

终极指南:Switch大气层系统1.7.1完整安装与功能解锁 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 想要为你的Nintendo Switch解锁更多可能性吗?大气层&#xff08…...

Ubuntu 22.04 系统上完整安装 ROS 2 Humble

第一步:确保系统支持 UTF-8 编码sudo apt update && sudo apt install locales sudo locale-gen en_US en_US.UTF-8 sudo update-locale LC_ALLen_US.UTF-8 LANGen_US.UTF-8 export LANGen_US.UTF-8第二步:添加 ROS 2 软件源# 安装 curl sudo ap…...

Botty:暗黑2重制版自动化助手,解放双手的智能刷宝方案

Botty:暗黑2重制版自动化助手,解放双手的智能刷宝方案 【免费下载链接】botty D2R Pixel Bot 项目地址: https://gitcode.com/gh_mirrors/bo/botty 还在为暗黑2重制版中重复枯燥的刷怪、捡装备而烦恼吗?Botty这款开源自动化工具正是你…...

Klipper共振补偿:彻底解决3D打印“幽灵纹路“的专业指南

Klipper共振补偿:彻底解决3D打印"幽灵纹路"的专业指南 【免费下载链接】klipper Klipper is a 3d-printer firmware 项目地址: https://gitcode.com/GitHub_Trending/kl/klipper Klipper共振补偿技术是消除3D打印中"幽灵纹路"&#xff0…...

【Kubernetes专项】温故而知新,重温技术原理(1)

1.简单说说什么是kubernetes? K8s 是一个开源的容器编排平台;用来自动调度、弹性扩缩容、自愈修复及管理容器化应用核心作用:统一管理容器生命周期,简化大规模容器集群的部署、运维及管理的难题。2.Pod是什么?和容器有什么区别? …...

慧科讯业:2026年北京车展前瞻报告

行业背景政策:汽车政策从补贴转向内需 技术双轮驱动,L3 自动驾驶准入标准 2026 年落地,新能源车购置税减半至 2027 年。消费:购车群体年轻化,26-35 岁占比 42.3%,智能化成核心标配,决策更理性。…...

从零到一:Nessus 实战部署与合规性扫描指南

1. Nessus 基础认知与企业级部署准备 第一次接触Nessus的企业安全团队,往往会被其复杂的配置界面吓退。其实这个号称"漏洞扫描界的瑞士军刀"的工具,本质上就是个会主动敲门的安全检查员。想象一下,你新接手一栋商业大厦的安保工作…...

从‘超能力者大赛’到图论建模:如何用Floyd算法解决天梯赛L3-034的路径规划问题

从‘超能力者大赛’到图论建模:如何用Floyd算法解决天梯赛L3-034的路径规划问题 在算法竞赛中,题目往往通过精心设计的故事情节来包装核心算法问题。这类题目考验的不仅是编码能力,更是快速识别问题本质的洞察力。L3-034"超能力者大赛&q…...

iOS与tvOS非越狱自定义工具Misaka深度解析与实战指南

iOS与tvOS非越狱自定义工具Misaka深度解析与实战指南 【免费下载链接】misaka iOS & tvOS customisation tool for KFD & MDC 项目地址: https://gitcode.com/gh_mirrors/mis/misaka Misaka是一款面向iOS和tvOS设备的革命性自定义工具,它通过KFD和M…...

以太网端口的ESD防护器件选型

ESD是以太网端口最常见的失效诱因,防护器件的选型直接影响端口可靠性和信号完整性。TVS管是首选防护器件,响应速度快(ps级),钳位电压低。关键参数包括:工作电压(VRWM)需高于信号峰值…...

real-anime-z创意拓展:结合‘雨景’‘霓虹’‘樱花’等氛围词激发新构图

real-anime-z创意拓展:结合雨景霓虹樱花等氛围词激发新构图 1. 动漫风格创作新思路 在动漫创作中,氛围感的营造往往能让作品脱颖而出。real-anime-z作为专业的二次元文生图工具,特别擅长通过氛围词来激发创意构图。本文将重点展示如何利用&…...

基于SSH的多跳远程访问工具PKURemote:原理、实现与配置管理

1. 项目概述与核心价值最近在折腾远程办公和实验室资源访问时,发现了一个挺有意思的项目,叫“PKURemote”。光看名字,你大概能猜到它和高校有关,没错,这最初是围绕特定学术机构内网环境访问需求而诞生的一个工具集。但…...

ChanlunX缠论插件:通达信上的终极缠论分析神器

ChanlunX缠论插件:通达信上的终极缠论分析神器 【免费下载链接】ChanlunX 缠中说禅炒股缠论可视化插件 项目地址: https://gitcode.com/gh_mirrors/ch/ChanlunX 你是否在通达信软件中苦苦寻找高效的缠论分析工具?是否厌倦了手动绘制笔段和中枢的繁…...

AI Agent Harness Engineering 的安全性挑战:提示词注入与越狱

AI Agent Harness Engineering 的安全性挑战:提示词注入与越狱 3-5个标题备选 《从LangChain构建的AI Agent到企业内网泄密:提示词注入与越狱的完整攻防手册》 《AI Agent Harness实战避坑:5分钟带你理解为何90%的初级Agent存在致命安全漏洞》 《告别“裸奔”的AI助手:Pro…...

如何快速搭建个人AI助手?Open WebUI完整指南让你轻松掌控本地AI

如何快速搭建个人AI助手?Open WebUI完整指南让你轻松掌控本地AI 【免费下载链接】open-webui User-friendly AI Interface (Supports Ollama, OpenAI API, ...) 项目地址: https://gitcode.com/GitHub_Trending/op/open-webui 想象一下,你正在处理…...

解锁离线学习革命:MoocDownloader如何让你随时随地掌控MOOC课程

解锁离线学习革命:MoocDownloader如何让你随时随地掌控MOOC课程 【免费下载链接】MoocDownloader An MOOC downloader implemented by .NET. 一枚由 .NET 实现的 MOOC 下载器. 项目地址: https://gitcode.com/gh_mirrors/mo/MoocDownloader 你是否曾因为网络…...

UniApp动态头像框实战:从报错‘/pages/index/undefined’到流畅渲染的完整避坑指南

UniApp动态头像框开发实战:从数据绑定到渲染时序的深度解析 在移动应用开发中,用户头像与相框的动态组合是一个常见但容易踩坑的功能点。许多UniApp开发者都曾遇到过这样的场景:设计稿上精美的动态头像框效果,在实际编码时却频频遭…...

5分钟掌握AI纹理生成:智能法线贴图工具的完整指南

5分钟掌握AI纹理生成:智能法线贴图工具的完整指南 【免费下载链接】DeepBump Normal & height maps generation from single pictures 项目地址: https://gitcode.com/gh_mirrors/de/DeepBump DeepBump是一款革命性的AI纹理生成工具,能够从单…...