「NOIP2015」斗地主
传送门
Luogu
解题思路
给你们一张搜索顺序图,然后就大力模拟就好。

细节注意事项
- 爆搜题,你们懂的。。。
参考代码
写的有点丑了,洛谷上只能过加强版的88分,会T六个点
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cctype>
#include <cmath>
#include <ctime>
#define rg register
using namespace std;
template < typename T > inline void read(T& s) {
s = 0; int f = 0; char c = getchar();
while (!isdigit(c)) f |= c == '-', c = getchar();
while (isdigit(c)) s = s * 10 + (c ^ 48), c = getchar();
s = f ? -s : s;
}
int n, ans, sum[25];
inline void dfs(int x) {
if (x >= ans) return;
int cnt = 0;
for (rg int i = 3; i <= 14; ++i) {
if (sum[i] < 1) cnt = 0;
else if ((++cnt) >= 5) {
for (rg int j = i - cnt + 1; j <= i; ++j) --sum[j];
dfs(x + 1);
for (rg int j = i - cnt + 1; j <= i; ++j) ++sum[j];
}
}
cnt = 0;
for (rg int i = 3; i <= 14; ++i) {
if (sum[i] < 2) cnt = 0;
else if ((++cnt) >= 3) {
for (rg int j = i - cnt + 1; j <= i; ++j) sum[j] -= 2;
dfs(x + 1);
for (rg int j = i - cnt + 1; j <= i; ++j) sum[j] += 2;
}
}
cnt = 0;
for (rg int i = 3; i <= 14; ++i) {
if (sum[i] < 3) cnt = 0;
else if ((++cnt) >= 2) {
for (rg int j = i - cnt + 1; j <= i; ++j) sum[j] -= 3;
dfs(x + 1);
for (rg int j = i - cnt + 1; j <= i; ++j) sum[j] += 3;
}
}
for (rg int i = 2; i <= 14; ++i) {
if (sum[i] >= 3) {
sum[i] -= 3;
for (rg int j = 2; j <= 15; ++j) {
if (i == j || sum[j] < 1) continue;
--sum[j], dfs(x + 1), ++sum[j];
}
for (rg int j = 2; j <= 14; ++j) {
if (i == j || sum[j] < 2) continue;
sum[j] -= 2, dfs(x + 1), sum[j] += 2;
}
sum[i] += 3;
}
if (sum[i] >= 4) {
sum[i] -= 4;
for (rg int j = 2; j <= 15; ++j) {
if (i == j || sum[j] < 1) continue;
--sum[j];
for (rg int k = 2; k <= 15; ++k) {
if (i == k || sum[k] < 1) continue;
--sum[k], dfs(x + 1), ++sum[k];
}
++sum[j];
}
for (rg int j = 2; j <= 14; ++j) {
if (i == j || sum[j] < 2) continue;
sum[j] -= 2;
for (rg int k = 2; k <= 14; ++k) {
if (i == k || sum[k] < 2) continue;
sum[k] -= 2, dfs(x + 1), sum[k] += 2;
}
sum[j] += 2;
}
sum[i] += 4;
}
}
for (rg int i = 2; i <= 15; ++i) x += sum[i] > 0;
ans = min(ans, x);
}
inline void solve() {
memset(sum, 0, sizeof sum);
for (rg int i = 1; i <= n; ++i) {
int x, y; read(x), read(y);
if (x == 0) ++sum[15];
else if (x == 1) ++sum[14];
else ++sum[x];
}
ans = 2147483647, dfs(0);
printf("%d\n", ans);
}
int main() {
#ifndef ONLINE_JUDGE
freopen("in.in", "r", stdin);
#endif
int T; read(T), read(n);
while (T--) solve();
return 0;
}
完结撒花 \(qwq\)
「NOIP2015」斗地主的更多相关文章
- LG2679 「NOIP2015」子串 线性DP
问题描述 LG2679 题解 设\(opt[i][j]\)代表A串前\(i\)个,匹配\(B\)串前\(j\)个,选择了\(k\)个子串的方案数. 转移用前缀和优化一下. \(\mathrm{Code ...
- loj2425 「NOIP2015」运输计划[二分答案+树上差分]
看到题意最小化最长路径,显然二分答案,枚举链长度不超过$\text{mid}$,然后尝试检验.````` 检验是否存在这样一个边置为0后,全部链长$\le\text{mid}$,其最终目标就是.要让所 ...
- loj2424 「NOIP2015」子串[字符串DP]
给定字符串 A,B,要求从 A 中取出互不重叠的 k 个非空子串,按照出现顺序拼起来后等于 B.求方案数.n ≤ 1000,m ≤ 200. 主要是状态的转移.先设计出$f_{i,j,k}$表长度$B ...
- 「NOIP2015」运输计划
传送门 Luogu 解题思路 首先这题可以直接二分答案,然后我们每次都把属于长度大于二分值的路径上的边标记一次,表示选这条边可以优化几条路径. 然后我们显然是要选一条覆盖次数等于需要覆盖的路径数并且长 ...
- 「译」JUnit 5 系列:条件测试
原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...
- 「译」JUnit 5 系列:扩展模型(Extension Model)
原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...
- JavaScript OOP 之「创建对象」
工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...
- 「C++」理解智能指针
维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...
- 「JavaScript」四种跨域方式详解
超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...
随机推荐
- maven的背景
本书链接 链接:http://pan.baidu.com/s/1c2fF3Ks 密码:hlce maven是一套软件工程管理和整合工具. 基于工程对象模型的概念(POM),通过一个中央信息管理模块,m ...
- 【代码审计】MenInfo文件包含漏洞
代码审计是我之前一直不敢涉及的领域,它包含的知识面太广.最近才开始学习,前段时间写的第一篇代码审计的文章 更多的感觉像是一个黑盒测试.我也会尽量把文章写的通俗易懂.代码审计 0基础从大牛的蜕变 从这里 ...
- 战争游戏OverTheWire:Bandit(一)
一个用来熟悉linux命令的游戏: Level0 告诉我们使用ssh连接网址,用户名和密码皆为bandit0.使用Xshell或者linux连接都可以 我使用的是Xshell5: Level0-> ...
- layer.open({}) 子页面传参并调用父页面的方法
闲话少说先看效果!!! 说明适用场景:在a.jsp页面,点击查看一个文件,layer.open弹出b.jsp页面,在b.jsp页面可以修改文件的名称(其实是去改了数据库),但是关闭弹窗的后,要求不刷新 ...
- 中国电信与小米成立5G联合创新实验室
导读 中国电信与小米成立5G联合创新实验室 近日,在中国电信战略与创新研究院,小米与中国电信共同发起的5G联合创新实验室正式揭牌成立.双方将充分发挥技术.网络.产品和生态的优势,围绕“5G+AIoT” ...
- 洛谷 T8088 RQY的舞会
嗯... 题目链接:https://www.luogu.org/problem/T8088 这道题很好想,我想的是维护两个小根堆(当然可以用数组模拟) 然后从堆顶开始,如果两个元素的差小于1,则cnt ...
- 自定义 directive pagination
学习angular过程中,对directive 不是很了解,很有必要自己写一个,以便知道它的各方面的处理方式. directive 中 scope 与 controller 交互,有三种定义策略 &q ...
- mysql查询最大值,最小值,平均值,总和
select max(score) maxScore,min(score) minScore,avg(score) avgScore,sum(score) sumScore from exam_sco ...
- Docker 之registry私有仓库搭建
Docker 之registry私有仓库搭建 官方提供的私有仓库docker registry用法 https://yeasy.gitbooks.io/docker_practice/reposito ...
- String类为什么是不可变的
String类为啥是final的? 我们找到string的jdk源码 1.看到String类被final修饰.这里你就要说出被final修饰的类不能被继承,方法不能被重写,变量不能被修改. 2.看到f ...