【NOIP】提高组2015 斗地主
【题意】按照斗地主出牌规则,给定手牌求出完的最少步数。
【算法】模拟+搜索
【题解】
可以发现除了顺子,其它的出牌规则都和点数无关,只与同点数的牌数有关。
所以可以先暴力枚举要出哪些顺子,然后每一个出完顺子后手牌的情况处理成b[4]表示牌数为1~4的点数有多少个,然后进行dfs。(为了方便,将A接在14,然后注意2不能顺)
dfs(s,t,j,z)表示有s组牌数为1,有t组牌数为2,有j组牌数为3,有z组牌数为4的情况出完手牌的最少步数。(可以记忆化)
然后在dfs讨论一下【单打】【拆牌】【带牌】三种情况,对应转移就可以了。(数据小,写多暴力都没关系)
双王在进入dfs前特殊处理:有双王就考虑多一种当炸弹打的情况,然后就直接将王当作单排进入dfs。
代码已通过各大OJ增强版(>w<)。
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=,inf=0x3f3f3f3f;
const int limit[]={,,,};
int f[maxn][maxn][maxn][maxn],a[maxn],b[maxn];
int min(int a,int b){return a<b?a:b;}
int dfs(int s,int t,int j,int z){
if(~f[s][t][j][z])return f[s][t][j][z];
int ans=inf;
if(t)ans=min(ans,dfs(s+,t-,j,z));
if(j)ans=min(ans,dfs(s+,t+,j-,z));
if(z)ans=min(ans,min(dfs(s,t+,j,z-),dfs(s+,t,j+,z-)));
if(j&&s)ans=min(ans,dfs(s-,t,j-,z)+);
if(j&&t)ans=min(ans,dfs(s,t-,j-,z)+);
if(z&&s>)ans=min(ans,dfs(s-,t,j,z-)+);
if(z&&t>)ans=min(ans,dfs(s,t-,j,z-)+);
return f[s][t][j][z]=min(ans,s+t+j+z);
}
int calc(int step){
int ans=inf,tot;
for(int k=;k<=;k++){
for(int i=;i<=;i++){
tot=;
for(int j=i;j<=;j++)if(a[j]>=k)tot++;else break;
for(int j=i+limit[k]-;j<=i+tot-;j++){
for(int l=i;l<=j;l++)a[l]-=k;
ans=min(ans,calc(step+));
for(int l=i;l<=j;l++)a[l]+=k;
}
}
}
b[]=b[]=b[]=b[]=;
for(int i=;i<=;i++)b[a[i]]++;
if(a[]==)ans=min(ans,step++dfs(b[],b[],b[],b[]));
b[]+=a[];
ans=min(ans,step+dfs(b[],b[],b[],b[]));
return ans;
}
int main(){
int T,n;
scanf("%d%d",&T,&n);
memset(f,-,sizeof(f));
f[][][][]=;
while(T--){
int u,v;
memset(a,,sizeof(a));
for(int i=;i<=n;i++){
scanf("%d%d",&u,&v);
a[u]++;
}
a[]=a[];
printf("%d\n",calc());
}
return ;
}//thanks for Lucius's code!
【NOIP】提高组2015 斗地主的更多相关文章
- 题解——洛谷 P2680 NOIP提高组 2015 运输计划
树上差分加上二分答案 详细题解待填坑 #include <cstdio> #include <algorithm> #include <cstring> using ...
- 题解 【luogu P2680 NOIp提高组2015 运输计划】
题目链接 题解 题意 一棵树上有\(m\)条路径,可以将其中一条边的权值改为0,问最长的路径最短是多少 分析 最短的路径最长自然想到二分最长路径,设其为\(dis\) 关键在于如何check chec ...
- 树型大融合——NOIP提高组2015 D1T3 【运输计划】
下午用一个小时看了一下树上差分,打了个差分模板,A了3题,真的爽! 题目描述: 公元2044 年,人类进入了宇宙纪元. L 国有 n 个星球,还有 n-1 条双向航道,每条航道建立在两个星球之间,这 ...
- NOIP提高组初赛难题总结
NOIP提高组初赛难题总结 注:笔者开始写本文章时noip初赛新题型还未公布,故会含有一些比较老的内容,敬请谅解. 约定: 若无特殊说明,本文中未知数均为整数 [表达式] 表示:在表达式成立时它的值为 ...
- NOIP提高组2004 合并果子题解
NOIP提高组2004 合并果子题解 描述:在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消 ...
- 计蒜客 NOIP 提高组模拟竞赛第一试 补记
计蒜客 NOIP 提高组模拟竞赛第一试 补记 A. 广场车神 题目大意: 一个\(n\times m(n,m\le2000)\)的网格,初始时位于左下角的\((1,1)\)处,终点在右上角的\((n, ...
- 1043 方格取数 2000 noip 提高组
1043 方格取数 2000 noip 提高组 题目描述 Description 设有N*N的方格图(N<=10,我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0.如下图所示(见样 ...
- [NOIP提高组2018]货币系统
[TOC] 题目名称:货币系统 来源:2018年NOIP提高组 链接 博客链接 CSDN 洛谷博客 洛谷题解 题目链接 LibreOJ(2951) 洛谷(P5020) 大视野在线评测(1425) 题目 ...
- 津津的储蓄计划 NOIp提高组2004
这个题目当年困扰了我许久,现在来反思一下 本文为博客园ShyButHandsome的原创作品,转载请注明出处 右边有目录,方便快速浏览 题目描述 津津的零花钱一直都是自己管理.每个月的月初妈妈给津津\ ...
随机推荐
- Java中的线程状态转换和线程控制常用方法
Java 中的线程状态转换: [注]:不是 start 之后就立刻开始执行, 只是就绪了(CPU 可能正在运行其他的线程). [注]:只有被 CPU 调度之后,线程才开始执行, 当 CPU 分配给你的 ...
- PHP利用pcntl_exec突破disable_functions
http://fuck.0day5.com/?p=563 PHP突破Disable_functions执行Linux命令 利用dl函数突破disable_functions执行命令 http://ww ...
- 软工网络15团队作业4——Alpha阶段敏捷冲刺-4
一.当天站立式会议照片: 二.项目进展 昨天已完成的工作: 完成程序副界面的设计与信息的输入统计 明天计划完成的工作: 日期等细致信息的处理 工作中遇到的困难: 对微信小程序开发的代码构成有了一些了解 ...
- phpcms 本地环境调试缓慢 解决办法
用记事本打开host文件,(文件位置,windows下一般在路径C:\Windows\System32\drivers\etc下)找到#127.0.0.1 localhost 这一句 去掉 ...
- Bootstrap 轮播图的使用和理解
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...
- BZOJ4709 JSOI2011柠檬(动态规划)
首先要冷静下来发现这仅仅是在划分区间.显然若有相邻的数字相同应当划分在同一区间.还有一个显然的性质是区间的两端点应该相同且选择的就是端点的数.瞬间暴力dp就变成常数极小100002了.可以继续斜率优化 ...
- zlog使用手册
zlog使用手册 来源 http://hardysimpson.github.io/zlog/UsersGuide-CN.html Contents Chapter 1 zlog是什么? 1.1 ...
- 【题解】SDOI2009Bill的挑战
这题好像状压的做法比较的无脑?但想记录一下容斥的做法,感觉自己对于容斥简直一无所知.这道题目容斥的解法我也是看了题解才会的.如有雷同,是我看的(*/ω\*)我们可以首先枚举当前字符串与给定的哪 \(k ...
- [NOIP2017]逛公园 最短路图 拓扑序DP
---题面--- 题解: 挺好的一道题. 首先我们将所有边反向,跑出n到每个点的最短路,然后f[i][j]表示从i号节点出发,路径长比最短路大j的方案数. 观察到,如果图中出现了0环,那么我们可以通过 ...
- 【BZOJ 3569】DZY Loves Chinese II 随机化+线性基
用到一个结论——[先建树,再给每个非树边一个权值,每个树边的权值为覆盖他的非树边的权值的异或和,然后如果给出的边存在一个非空子集异或和为0则不连通,否则连通](必须保证每条边的出现和消失只能由自己产生 ...