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_搜索_剪枝的更多相关文章

  1. CF293B Distinct Paths 搜索

    传送门 首先数据范围很假 当\(N + M - 1 > K\)的时候就无解 所以对于所有要计算的情况,\(N + M \leq 11\) 超级小是吧,考虑搜索 对于每一个格子试填一个数 对于任意 ...

  2. 连连看 HDU - 1175_搜索_剪枝

    hdu有毒,考试上 AC 的就是一直 WA- 其实这道题是可以进行初始化来进行优化的,这样的话询问次数是可以达到 10510^5105 的.不过普通的 dfsdfsdfs + 剪枝也是可过的. Cod ...

  3. CF293B Distinct Paths题解

    CF293B Distinct Paths 题意 给定一个\(n\times m\)的矩形色板,有kk种不同的颜料,有些格子已经填上了某种颜色,现在需要将其他格子也填上颜色,使得从左上角到右下角的任意 ...

  4. 搜索(剪枝优化):HDU 5113 Black And White

    Description In mathematics, the four color theorem, or the four color map theorem, states that, give ...

  5. 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 ...

  6. [算法专题] 深度优先搜索&回溯剪枝

    1. Palindrome Partitioning https://leetcode.com/problems/palindrome-partitioning/ Given a string s, ...

  7. SGU 125 Shtirlits 搜索+可行性剪枝

    500ms时限406ms水过…… 直接枚举肯定超时,需要剪枝. 枚举每个格子的元素,检查其左上角和正上方格子是否满足条件,若不满足不必再向下搜索. 在 这里 看到一个更好的方法: 枚举每个格子是哪个相 ...

  8. USACO 1.3... 虫洞 解题报告(搜索+强大剪枝+模拟)

    这题可真是又让我找到了八数码的感觉...哈哈. 首先,第一次见题,没有思路,第二次看题,感觉是搜索,就这样写下来了. 这题我几乎是一个点一个点改对的(至于为什么是这样,后面给你看一个神奇的东西),让我 ...

  9. P1171 售货员的难题--搜索(剪枝)

    题目背景 数据有更改 题目描述 某乡有nn个村庄(1<n \le 201<n≤20),有一个售货员,他要到各个村庄去售货,各村庄之间的路程s(0<s<1000)s(0<s ...

随机推荐

  1. nginx + keepalived双活配置

    一.安装nginx 我们这边默认安装的nginx的是1.12.2的版本,所以我们需要安装1.16.1版本的nginx的,才好,所以我们这边先更新yum源,步骤如下: 1.添加yum源: [root@s ...

  2. CF1174D Ehab and the Expected XOR Problem(二进制)

    做法 求出答案序列的异或前缀和\(sum_i\),\([l,r]\)子段异或和可表示为\(sum_r\bigoplus sum_{l-1}\) 故转换问题为,填\(sum\)数组,数组内的元素不为\( ...

  3. JRebel for IntelliJ激活

    好久没用jrebel了,跟前端进行项目联调总是有些许改动,还是热部署方便. 目前用的idea版本:IntelliJ IDEA 2019.2 JRebel插件版本:JRebel for IntelliJ ...

  4. Hbase 错误记录分析(1) region超时问题

    错误现象: 默认等待时间是60秒,超过这个时间就报超时问题了.因此需调整超时时间,默认为60秒,在配置文件 hbase-site.xml中: 调整成10分钟 <property>    & ...

  5. docker 笔记--运行中的容器如何添加端口映射

    解决: iptables -t nat -A DOCKER -p tcp --dport ${YOURPORT_1} -j DNAT --to-destination ${CONTAINERIP}:$ ...

  6. C++生成DM数据点导入DM

    在c++编写正弦曲线点的代码,源代码如下: //想要使用内置的π,此句必不可少! #define _USE_MATH_DEFINES #include<iostream> #include ...

  7. meshing-圆锥网格划分

    原视频下载地址: https://pan.baidu.com/s/1boSjGXh 密码: 9zis

  8. object_id()函数

    SQLServer数据库中,如果查询数据库中是否存在指定名称的索引或者外键约束等,经常会用到object_id('name','type')方法,做笔记如下: ? 语法:object_id('obje ...

  9. secureCRT操作redis-cli时, 不断追加ip:port

    Session Options-->Terminal-->Emulation-->Terminal为Linux

  10. PHP fopen/file_get_contents与curl性能比较

    PHP中fopen,file_get_contents,curl 函数的区别: 1.fopen/file_get_contents 每次请求都会重新做 DNS 查询,并不对 DNS 信息进行缓存. 但 ...