[Luogu2540][NOIP2016]斗地主增强版(搜索+DP)
增强版就是原版中两鬼不算对子的版本。
先爆搜出完所有对子,剩下的牌DP处理。
考虑每个数码的拆牌情况,最多可能被拆成5种情况:1+1+1+1,1+1+2,1+3,2+2,4。故DP状态数最多为5^13≈12e8,事实上远远不满。
而爆搜部分看上去就跑的挺快,具体复杂度玄学。
几个降低代码复杂度的方法和注意点:
1.双王不算对,2不算顺子。
2.1当14处理,2和双王单独处理。
3.对于DP状态,先拆牌后打出。
4.炸弹当三带一打。
5.DP用记忆化搜索实现,递归边界:既没有3也没有4,这样转移就只需考虑3和4的拆牌和打出了。
#include<cstdio>
#include<cstring>
#include<algorithm>
#define rep(i,l,r) for (int i=(l); i<=(r); i++)
using namespace std; const int N=,inf=1e9;
const int lim[]={,,,};
int T,n,x,y,a[N],b[N],f[N][N][N][N]; int calc(int a,int b,int c,int d){
if (a< || b< || c< || d<) return inf;
if (!c && !d) return a+b;
if (~f[a][b][c][d]) return f[a][b][c][d];
int ans=min(calc(a+,b,c+,d-),calc(a,b+,c,d-));//拆四
ans=min(ans,min(calc(a+,b,c-,d),calc(a+,b+,c-,d)));//拆三
ans=min(ans,min(calc(a-,b,c,d-),calc(a,b-,c,d-))+);//四带一
ans=min(ans,min(calc(a,b-,c,d-),calc(a,b,c,d-))+);//四带二
ans=min(ans,min(calc(a-,b,c-,d),calc(a,b-,c-,d))+);//三带一
return f[a][b][c][d]=ans;
} int dfs(int x){
int ans=inf;
rep(k,,) rep(i,,){
int tot=;
rep(j,i,) if (a[j]>=k) tot++; else break;
rep(j,i+lim[k]-,i+tot-){
rep(l,i,j) a[l]-=k;
ans=min(ans,dfs(x+));
rep(l,i,j) a[l]+=k;
}
}
b[]=b[]=b[]=b[]=;
rep(i,,) b[a[i]]++;
if (a[]==) ans=min(ans,x+calc(b[],b[],b[],b[])+);//火箭
ans=min(ans,x+calc(b[]+a[],b[],b[],b[]));
return ans;
} int main(){
freopen("lord.in","r",stdin);
freopen("lord.out","w",stdout);
scanf("%d%d",&T,&n); memset(f,-,sizeof(f));
while(T--){
memset(a,,sizeof(a));
rep(i,,n) scanf("%d%d",&x,&y),a[x]++;
a[]=a[]; printf("%d\n",dfs());
}
return ;
}
[Luogu2540][NOIP2016]斗地主增强版(搜索+DP)的更多相关文章
- Luogu 2540 斗地主增强版(搜索,动态规划)
Luogu 2540 斗地主增强版(搜索,动态规划) Description 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游 ...
- P2540 斗地主增强版
P2540斗地主增强版 参考大佬题解 思路:顺子暴力搜,剩下的牌我不会贪心所以用记忆化搜索(或者dp): 注意:双王不能当对,二不算顺子 代码 #include <cstdio> #inc ...
- 洛谷 题解 P2540 【斗地主增强版】
[分析] 暴力搜顺子,贪心出散牌 为什么顺子要暴力? 玩过斗地主的都知道,并不是出越长的顺子越好,如果你有一组手牌,3,4,5,6,7,6,7,8,9,10,你一下把最长的出了去,你会单两张牌,不如出 ...
- Luogu2540 斗地主增强版(搜索+动态规划)
单纯的暴搜似乎还是很好写的,然而过不了.出完顺子之后答案是可以dp出来的,于是大力搜然后大力dp就好了. dp时强行讨论完了几乎所有拆牌情况,理性愉悦一发. #include<iostream& ...
- luogu2540 斗地主增强版
题目大意 给你一副手牌,没有飞机带翅膀,按斗地主的规则,求将所有牌打出的最少次数. 题解 先不考虑顺子 我们已经知道花色对牌没有影响,那么如果不考虑顺子,每个牌具体是什么数字我们也用不着知道,我们关心 ...
- 【NOIP2015】斗地主 D1 T3 及 增强版 (送命题)
恶心送命模拟题 暴搜顺子,DP预处理剩下的. 由于官方数据太水,很多情况没有讨论的都能过普通版本,想要测试自己代码正确性的同学们可以交交这道题,有很多dalao给出了hack数据 : Luogu P2 ...
- 《zw版·delphi与halcon系列原创教程》zw版_THOperatorSetX控件函数列表 v11中文增强版
<zw版·delphi与halcon系列原创教程>zw版_THOperatorSetX控件函数列表v11中文增强版 Halcon虽然庞大,光HALCONXLib_TLB.pas文件,源码就 ...
- hdu 1024(最大和连续子序列增强版)
题意:最大和连续子序列的增强版,要求从一序列中取出若干段,这些段之间不能交叉,使得和最大并输出. 分析:用dp[i][j]表示前j个数取出i段得到的最大值,那么状态转移方程为dp[i][j]=max( ...
- 微慕WordPress小程序增强版
2017年1月9日,张小龙在2017微信公开课Pro上发布的微信小程序正式上线.在过去的2年多的时间里,微信小程序领头,各大互联网平台也不甘落后,陆续推出自己的小程序.2018年7月4日,百度智能小程 ...
随机推荐
- hdu 3371(prim算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3371 Connect the Cities Time Limit: 2000/1000 MS (Jav ...
- MySQL 8.0 正式版 8.0.11 发布:比 MySQL 5.7 快 2 倍
ySQL 8.0 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能! 注意:从 MySQL 5.7 升级到 MySQL 8. ...
- Linux内核空间内存申请函数kmalloc、kzalloc、vmalloc的区别【转】
转自:http://www.th7.cn/system/lin/201606/167750.shtml 我们都知道在用户空间动态申请内存用的函数是 malloc(),这个函数在各种操作系统上的使用是一 ...
- Redis 主从部署
Redis 主从部署 http://www.xuchanggang.cn/archives/978.html
- 菜鸟学习nodejs--Socket.IO即时通讯
https://blog.csdn.net/lovemenghaibin/article/details/51263774
- (转)关于bootstrap, boosting, bagging,Rand forest
转自:https://blog.csdn.net/jlei_apple/article/details/8168856 这两天在看关于boosting算法时,看到一篇不错的文章讲bootstrap, ...
- [hadoop][会装]HBase集群安装--基于hadoop ha模式
可以参考部署HBase系统(分布式部署) 和基于无HA模式的hadoop下部署相比,主要是修改hbase-site .xml文件,修改如下参数即可: <property> <name ...
- 15:django 缓存架构
动态网站的一个基本权衡就是他们是动态的,每次一个用户请求一个页面,web服务器进行各种各样的计算-从数据库查询到模板渲染到业务逻辑-从而生成站点访问者看到的页面.从处理开销的角度来看,相比标准的从文件 ...
- springmvc3 拦截器,过滤ajax请求,判断用户登录,拦截规则设置
web.xml设置:(/拦截所有请求) <servlet> <servlet-name>dispatcher</servlet-name> <servlet- ...
- java虚拟机字节码执行引擎
定义 java虚拟机字节码执行引擎是jvm最核心的组成部分之一,它做的事情很简单:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果.在不同的虚拟机实现里,执行引擎在执行java代码 ...