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

洛谷P4907题解

题目传送门

题意:


扑克牌的部分牌被移除,需从剩牌中选 4 个区间,每个区间的牌都是同一花色且点数连续。如果不可选,输出最少需添加几张牌才能满足要求。

思路:


暴力和剪枝。

暴力:按照题意模拟,这样你可以拿到 60 分。

剪枝:


有两种剪枝方法,一种是最优性剪枝,顾名思义,如果当前答案比目前大最优答案大了就剪掉;另一种是可行性剪枝,也就是说当前的不合法了就剪。

#include<bits/stdc++.h>
using namespace std;
const int N = 99;
int a[N],b[N],l[N],r[N],cnt[N],n,now1,ans=N,ans1=N;
char s[N];
void dfs(int h,int lef) { //lef为n-当前已选中总次数if(h==5) {int now=0;for(int i=1; i<=13; ++i) {if(cnt[i]>0) return;//不合法now|=cnt[i]<0;}if(now) {ans1=now1;return;}for(int i=1; i<=n; ++i) if((l[a[i]]>b[i]||r[a[i]]<b[i])&&++now==ans) return;ans=now,ans1=1;return;}for(int i=max(lef-(4-h)*13,0),j,rr; i<=13; ++i) { //枚举区间长度,可行性剪枝if(i==0) {l[h]=r[h]=0;dfs(h+1,lef);continue;}for(rr=i; rr<=13; ++rr) { //右端点for(j=rr-i+1; j<=rr; ++j) now1+=--cnt[j]<0; //动态维护if(now1<ans1) l[h]=(r[h]=rr)-i+1,dfs(h+1,lef-i);//最优性剪枝for(j=rr-i+1; j<=rr; ++j) now1-=++cnt[j]<=0;}}
}
int main() {cin>>n;for(int i=1; i<=n; ++i) {cin>>a[i]>>s;if(s[0]=='A') b[i]=1;else if(s[0]=='1') b[i]=10;else if(s[0]=='J') b[i]=11;else if(s[0]=='Q') b[i]=12;else if(s[0]=='K') b[i]=13;else b[i]=s[0]-'0';++cnt[b[i]];}dfs(1,n);if(ans!=N) printf("Yes\n%d",ans);else printf("No\n%d",ans1);return 0;
}

相关文章:

  • AI大模型学习二十四、实践QEMU-KVM 虚拟化:ubuntu server 25.04 下云镜像创建Ubuntu 虚拟机
  • Stack overflow
  • 从单体架构到微服务:架构演进之路
  • React19源码系列之 Diff算法
  • Kafka消息路由分区机制深度解析:架构设计与实现原理
  • SQL练习(3/81)
  • Kafka 中过多的 topic 导致整体上性能变慢的原因
  • HTML 表格与div深度解析区别及常见误区
  • 【C语言】初阶数据结构相关习题(二)
  • MySQL索引优化面试高频考点解析(附实战场景)
  • 火山RTC 8 SDK集成进项目中
  • 阿克曼-幻宇机器人系列教程3- 机器人交互实践(Message)
  • yarn任务筛选spark任务,判断内存/CPU使用超过限制任务
  • 语音识别——语音转文字
  • C++ 在 Windows 和 Linux 平台上的开发差异及常见问题
  • Java详解RabbitMQ工作模式之发布订阅模式
  • 拉取sset docker镜像
  • Dify与n8n全面对比指南:AI应用开发与工作流自动化平台选择【2025最新】
  • 冲刺软考:做减法,走出备考迷茫,高效提分!
  • 乘法口诀练习神器
  • 媒体评欧阳娜娜遭民进党当局威胁:艺人表达国家认同是民族大义
  • “家国万里时光故事会” 举行,多家庭共话家风与家国情怀
  • 刘强东坐镇京东一线:管理层培训1800人次,最注重用户体验
  • 网约车座椅靠背张贴“差评者得癌症”,如祺出行:未收到投诉无法处理
  • 第十二届警博会在京开幕:12个国家和地区835家企业参展
  • 杭州钱塘区3宗涉宅用地均以底价成交,共计成交金额25.73亿元