NOIP2015Day1T3斗地主(DFS)
这类题...真的写不动T T
首先可以发现没有顺子的话出牌次数是一定的, 换句话说只有顺子会影响出牌次数。
所以可以暴搜出所有顺子的方案, 搜完之后记忆化搜索求一下a张1张同色牌, b张2张同色牌,c张3张同色牌, d张4张同色牌的最少出牌次数, 注意搜索的时候b可以拆出2个a, c可以拆出1个a, 2个b, d可以拆除2个b或者1个a, 1个c, 然后剩下的直接搜就好了, 这个效率不会估T T
所以求可行方案用记忆化搜索也是很快的...效率大概就是状态数...
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn=, inf=1e9;
int T, n, x, y;
int f[maxn][maxn][maxn][maxn], cnt[maxn], cntsum[maxn];
int least[]={, , , };
inline void read(int &k)
{
int f=; k=; char c=getchar();
while(c<'' || c>'') c=='-'&&(f=-), c=getchar();
while(c<='' && c>='') k=k*+c-'', c=getchar();
k*=f;
}
int dfs(int a, int b, int c, int d)
{
if(~f[a][b][c][d]) return f[a][b][c][d];
int ans=inf;
if(b) ans=min(ans, dfs(a+, b-, c, d));
if(c) ans=min(ans, dfs(a+, b+, c-, d));
if(d) ans=min(ans, min(dfs(a+, b, c+, d-), dfs(a, b+, c, d-)));
if(a && c) ans=min(ans, dfs(a-, b, c-, d)+);
if(b && c) ans=min(ans, dfs(a, b-, c-, d)+);
if(a>= && d) ans=min(ans, dfs(a-, b, c, d-)+);
if(b>= && d) ans=min(ans, dfs(a, b-, c, d-)+);
return f[a][b][c][d]=min(ans, a+b+c+d);
}
int solve(int step)
{
int ans=inf;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
{
int len=;
for(int k=j;k<=;k++) if(cnt[k]>=i) len++; else break;
for(int k=j+least[i]-;k<=j+len-;k++)
{
for(int l=j;l<=k;l++) cnt[l]-=i;
ans=min(ans, solve(step+));
for(int l=j;l<=k;l++) cnt[l]+=i;
}
}
cntsum[]=cntsum[]=cntsum[]=cntsum[]=;
for(int i=;i<=;i++) cntsum[cnt[i]]++;
if(cnt[]==) ans=min(ans, step++dfs(cntsum[], cntsum[], cntsum[], cntsum[]));
cntsum[]+=cnt[];
ans=min(ans, step+dfs(cntsum[], cntsum[], cntsum[], cntsum[]));
return ans;
}
int main()
{
memset(f, -, sizeof(f));
f[][][][]=;
read(T); read(n);
while(T--)
{
memset(cnt, , sizeof(cnt));
for(int i=;i<=n;i++) read(x), read(y), cnt[x==?:x]++;
printf("%d\n", solve());
}
return ;
}
NOIP2015Day1T3斗地主(DFS)的更多相关文章
- NOIP2015斗地主[DFS 贪心]
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4< ...
- ZJOI2017 Day1
私のZJOI Day1 2017-3-21 07:52:53 有人在暴力膜 苟-- 富贵 无相忘 ZJOI2017交流群 133135071 如果你足够厉害 如果你足够厉害 如果你足够厉害 其实完全可 ...
- NOIP 历年试题大致考点总结
总的来说,水平还不够-- 要努力了! NOIP2012 D1T1 模拟, 字符串 D1T2 贪心, 数学 (推导贪心策略), 高精度 D1T3 unsolved 开车旅行 倍增 D2T1 解线性模方程 ...
- 斗地主(Noip2015Day1T3)
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4< ...
- AC日记——斗地主(dfs)
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4< ...
- 【NOIP2015】斗地主 题解(DFS+贪心)
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的AAA到KKK加上大小王的共545454张牌来进行的扑克牌游戏.在斗地主中,牌的大小关 系根据牌的数码表示如下: ...
- [NOIP2015] 斗地主(搜索)
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4< ...
- UOJ147 斗地主
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关 系根据牌的数码表示如下:3<4&l ...
- [NOIP2015] 提高组 洛谷P2668 斗地主
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4< ...
随机推荐
- 创建第一个Scrapy项目
d:进入D盘 scrapy startproject tutorial建立一个新的Scrapy项目 工程的目录结构: tutorial/ scrapy.cfg # 部署配置文件 tutorial/ # ...
- JUC——TimeUnit工具类(二)
TimeUnit工具类 在java.util.concurrent开发包里面提供有一个TimeUnit类,这个类单独看它的描述是一个时间单元类.该类是一个枚举类,这也是juc开包里面唯一的一个枚举类. ...
- HTML从入门到放弃
一.HTML 简介 链接:https://www.cnblogs.com/baishuchao/articles/9179920.html 二.HTML 基础 链接:https://www.cnblo ...
- python爬取淘宝华为手机
import re from selenium import webdriver from selenium.common.exceptions import TimeoutException fro ...
- 基于Mininet测量路径的损耗率
基于Mininet测量路径的损耗率 控制器采用POX,基于OVS仿真 Mininet脚本 创建Node mininet.node Node 创建链路连接 mininet.link TCLink 设置i ...
- mysql 5.5 zip配置安装
1.解压2.创建option文件 --defaults-file=../my.ini [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mys ...
- 兰亭集势股价疯涨背后:物流成外贸B2C发展掣肘
21世纪经济报道 汤浔芳 北京报道 核心提示:“兰亭集势涨势喜人,这样的增长是这两三年中概股没有出现过的.”一位负责美股投资的基金合伙人告诉记者,此前,中概股比较低迷,持续大幅度上涨,难得一见. 在唯 ...
- 四则运算2+psp0
程序要求: 1.题目避免重复 2.可定制(数量\打印方式) 3.可以一下控制参数 ① 是否有乘除法 ② 是否有括号(最多支持十个数参与运算) ③ 数值范围 ④加减有无负数 ⑤除法有无余数 分析:① 如 ...
- 团队项目NABCD
团队成员及项目简介 团队名:伍陸柒 团队成员: 李 俏(20132912 信1301-2) 郝 颖(20132919 信1301-2)http://www.cnblogs.com/haoying1 ...
- 字典树---2001 POJ Shortest Prefixes(找最短前缀)
做的第一道字典树的题,算比较水的: -->>>:传送门 代码: #include <stdio.h> #include<stdlib.h> #define M ...