[CF293B]Distinct Paths_搜索_剪枝
Distinct Paths
题目链接:http://codeforces.com/problemset/problem/293/B
数据范围:略。
题解:
带搜索的剪枝....
想不到吧.....
但是剪枝也比较简单,就是能想到的剪枝都加上能过的那种搜索题。
代码:
#include <bits/stdc++.h> #define setIO(s) freopen(s".in", "r", stdin), freopen(s".out", "w", stdout) using namespace std; const int mod = 1000000007 ; int Log[1100], n, m, k, a[21][21], f[21][21], v[21]; int dfs(int x, int y) {
if (y == m + 1) {
x ++ , y = 1;
}
if (x == n + 1) {
return 1;
}
int s = f[x - 1][y] | f[x][y - 1], calc = -1, re = 0;
int S = ~s & ((1 << k) - 1);
if (n + m - x - y + 1 > Log[S]) {
return 0;
}
for (int t = 0; t < k; t ++ ) {
if (S & (1 << t)) {
if (a[x][y] == 0 || a[x][y] == t + 1) {
v[t + 1] ++ ;
f[x][y] = s | (1 << t);
if (v[t + 1] == 1) {
if (calc == -1) {
calc = dfs(x, y + 1);
}
re += calc;
}
else {
re += dfs(x, y + 1);
}
if (re >= mod) {
re -= mod;
}
v[t + 1] -- ;
}
}
}
return re;
} int main() {
// setIO("search&force");
for (int i = 1; i < 1024; i ++ ) {
Log[i] = Log[i >> 1] + (i & 1);
}
// int T;
// cin >> T ;
// while (T -- ) {
// memset(v, 0, sizeof v);
// memset(f, 0, sizeof f);
cin >> n >> m >> k ;
if (n + m - 1 > k) {
puts("0");
return 0;
}
for (int i = 1; i <= n; i ++ ) {
for (int j = 1; j <= m; j ++ ) {
scanf("%d", &a[i][j]);
v[a[i][j]] ++ ;
}
}
cout << dfs(1, 1) << endl ;
return 0;
}
[CF293B]Distinct Paths_搜索_剪枝的更多相关文章
- CF293B Distinct Paths 搜索
传送门 首先数据范围很假 当\(N + M - 1 > K\)的时候就无解 所以对于所有要计算的情况,\(N + M \leq 11\) 超级小是吧,考虑搜索 对于每一个格子试填一个数 对于任意 ...
- 连连看 HDU - 1175_搜索_剪枝
hdu有毒,考试上 AC 的就是一直 WA- 其实这道题是可以进行初始化来进行优化的,这样的话询问次数是可以达到 10510^5105 的.不过普通的 dfsdfsdfs + 剪枝也是可过的. Cod ...
- CF293B Distinct Paths题解
CF293B Distinct Paths 题意 给定一个\(n\times m\)的矩形色板,有kk种不同的颜料,有些格子已经填上了某种颜色,现在需要将其他格子也填上颜色,使得从左上角到右下角的任意 ...
- 搜索(剪枝优化):HDU 5113 Black And White
Description In mathematics, the four color theorem, or the four color map theorem, states that, give ...
- ICPC Asia Nanning 2017 I. Rake It In (DFS+贪心 或 对抗搜索+Alpha-Beta剪枝)
题目链接:Rake It In 比赛链接:ICPC Asia Nanning 2017 Description The designers have come up with a new simple ...
- [算法专题] 深度优先搜索&回溯剪枝
1. Palindrome Partitioning https://leetcode.com/problems/palindrome-partitioning/ Given a string s, ...
- SGU 125 Shtirlits 搜索+可行性剪枝
500ms时限406ms水过…… 直接枚举肯定超时,需要剪枝. 枚举每个格子的元素,检查其左上角和正上方格子是否满足条件,若不满足不必再向下搜索. 在 这里 看到一个更好的方法: 枚举每个格子是哪个相 ...
- USACO 1.3... 虫洞 解题报告(搜索+强大剪枝+模拟)
这题可真是又让我找到了八数码的感觉...哈哈. 首先,第一次见题,没有思路,第二次看题,感觉是搜索,就这样写下来了. 这题我几乎是一个点一个点改对的(至于为什么是这样,后面给你看一个神奇的东西),让我 ...
- P1171 售货员的难题--搜索(剪枝)
题目背景 数据有更改 题目描述 某乡有nn个村庄(1<n \le 201<n≤20),有一个售货员,他要到各个村庄去售货,各村庄之间的路程s(0<s<1000)s(0<s ...
随机推荐
- Codeforces Round #524 (Div.2)题解
题解 CF1080A [Petya and Origami] 这道题其实要我们求的就是 \[\lceil 2*n/k \rceil + \lceil 5*n/k \rceil + \lceil 8*n ...
- JavaScript 字符串转数字(整数,浮点数,进制转换)
下面是使用parseFloat()方法的示例: parseFloat("1234blue"); //returns 1234.0 parseFloat("0xA" ...
- Jedis API操作redis数据库
1.配置文件 classpath路径下,新建redis.properties配置文件 配置文件内容 # Redis settings redis.host=127.0.0.1 redis.port=6 ...
- formidable处理提交的表单或图片文件的简单介绍
一般来说,客户端向服务端提交数据有GET和POST这两种方式,在之前的文章node.js当中的http模块与url模块的简单介绍当中我们可以知道通过req.url与url模块的配合处理可以快速得到客户 ...
- IDEA上安装Scala环境执行测试
1.安装scala IDEA下载Scala插件 IDEA->setting->Plugin->搜索Scala->选择Scala,然后, 2.删除火狐软件 sudo apt-ge ...
- clickhouse redash---olap
curl -XPUT '10.1.193.250:9200/ngx-logstash-2019-06/_settings' -d ' { "index.mapping.total_field ...
- git 设置git用户名和邮箱,并生成秘钥
1.设置 git 用户名 aaron@ubuntu:~$ git config --global user.name "xxx" 2.设置 git 邮箱 aaron@ubuntu: ...
- Drawable: getIntrinsicWidth()和getIntrinsicHeight()方法的使用误区
经常会使用上述两个API来获取ImageView中显示图片的大小,但是在某些情况下,这两个API返回的大小可能与原图的大小不一致,比如原图大小是72*72,分别把原图放置在xhdpi,xxhdpi,x ...
- VS中卸载Visual Assist X
Tools=>Extensions and updates=>找到Visual Assist X 卸载:
- 真正解决方案:java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
今天在使用JDK 12.0 环境下使用Hibernate 时候出现了这个错误,错误日志如下: 故障原因: JAXB API是java EE 的API,因此在java SE 9.0 中不再包含这个 Ja ...