Distinct Paths
代码
#include<cstdio>
using namespace std;
const int N = 20 , mod = 1e9 + 7 , K = 10;
int f[N + 5][N + 5] , map[N + 5][N + 5] , vis[K + 5] , n , m , k;
inline int dfs(int x , int y)
{
if (y == m + 1) return dfs(x + 1 , 1);
if (x == n + 1) return 1;
f[x][y] = f[x - 1][y] | f[x][y - 1];
int num = 0 , sum = 0 , res = 0 , bz = 0;
for(register int i = 1; i <= k; i++)
if (!(f[x][y] & (1 << i - 1))) num++;
if (num < n + m - x - y + 1) return 0;
if (!map[x][y])
{
for(register int i = 1; i <= k; i++)
if (!(f[x][y] & (1 << i - 1)))
{
if (!vis[i])
{
if (bz == 1)
{
res = (res + sum) % mod;
continue;
}
else
{
bz = 1;
vis[i]++;
f[x][y] |= 1 << i - 1;
sum = dfs(x , y + 1);
res = (res + sum) % mod;
f[x][y] ^= 1 << i - 1;
vis[i]--;
}
continue;
}
vis[i]++;
f[x][y] |= 1 << i - 1;
res = (res + dfs(x , y + 1)) % mod;
f[x][y] ^= 1 << i - 1;
vis[i]--;
}
}
else if (!(f[x][y] & (1 << map[x][y] - 1)))
{
f[x][y] |= 1 << map[x][y] - 1;
res = (res + dfs(x , y + 1)) % mod;
f[x][y] ^= 1 << map[x][y] - 1;
}
return res;
}
int main()
{
scanf("%d%d%d" , &n , &m , &k);
if (n + m - 1 > k)
{
printf("0");
return 0;
}
for(register int i = 1; i <= n; i++)
for(register int j = 1; j <= m; j++)
{
scanf("%d" , &map[i][j]);
vis[map[i][j]]++;
}
printf("%d" , dfs(1 , 1));
}
Distinct Paths的更多相关文章
- [codeforces 293]B. Distinct Paths
[codeforces 293]B. Distinct Paths 试题描述 You have a rectangular n × m-cell board. Some cells are alrea ...
- CF293B Distinct Paths题解
CF293B Distinct Paths 题意 给定一个\(n\times m\)的矩形色板,有kk种不同的颜料,有些格子已经填上了某种颜色,现在需要将其他格子也填上颜色,使得从左上角到右下角的任意 ...
- CF293B. Distinct Paths
B. Distinct Paths time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- CF293B Distinct Paths 搜索
传送门 首先数据范围很假 当\(N + M - 1 > K\)的时候就无解 所以对于所有要计算的情况,\(N + M \leq 11\) 超级小是吧,考虑搜索 对于每一个格子试填一个数 对于任意 ...
- Codeforces 293B Distinct Paths DFS+剪枝+状压
目录 题面 题目链接 题意翻译 输入输出样例 输入样例#1 输出样例#1 输入样例#2 输出样例#2 输入样例#3 输出样例#3 输入样例#4 输出样例#4 说明 思路 AC代码 总结 题面 题目链接 ...
- [CF293B]Distinct Paths_搜索_剪枝
Distinct Paths 题目链接:http://codeforces.com/problemset/problem/293/B 数据范围:略. 题解: 带搜索的剪枝.... 想不到吧..... ...
- uva 10564
Problem FPaths through the HourglassInput: Standard Input Output: Standard Output Time Limit: 2 Seco ...
- Codeforce 水题报告
最近做了好多CF的题的说,很多cf的题都很有启发性觉得很有必要总结一下,再加上上次写题解因为太简单被老师骂了,所以这次决定总结一下,也发表一下停课一星期的感想= = Codeforces 261E M ...
- 关于PJ 10.27
题1 : Orchestra 题意: 给你一个 n*m 的矩阵,其中有一些点是被标记过的. 现在让你求标记个数大于 k 个的二维区间个数. n.m .k 最大是 10 . 分析: part 1: 10 ...
- 考前停课集训 Day1 废
[友情链接] Day1 今天模拟赛倒数…… 感觉自己菜到爆炸…… 被一个以前初一的倒数爆踩…… 感觉自己白学了. 满分400,自己只有100.真的是倒数第一…… 做了一个T2,其他暴力分全部没有拿到… ...
随机推荐
- java 分别获取当前时间的年月日以及当前时间所在周的周一周末日期
以前也经常用date去截取,但是病史所有场景都适合,或者说效率满足不了,或者说拼接格外麻烦.能用java本省的的方法去实现其实更爽.因为中西方的文化的差异有时候在简单的方法上我们不得不去加一些其他的去 ...
- 【day01】redis
〇.思维导图 1.解决缓存数据库双写不一致 延迟双删(中间sleep一段时间)--写性能下降 内存队列:同一个key(线程)的所有操作丢到队列,串行化执行--实现麻烦&大量内存队列,队列宕机 ...
- 前端开发:4、JavaScript简介、变量与常量、数据类型及内置方法、运算符、流程控制、循环结构、内置方法
前端开发之JavaScript 目录 前端开发之JavaScript 一.JavaScript简介 二.JS基础 三.变量与常量 四.基本数据类型 1.数值类型 2.字符类型 3.布尔类型 五.特殊数 ...
- 10-排序6 Sort with Swap(0, i) (25point(s))
10-排序6 Sort with Swap(0, i) (25point(s)) Given any permutation of the numbers {0, 1, 2,..., N−1}, it ...
- HMS Core 6.8.0版本发布公告
分析服务 ◆ 游戏行业新增"区服分析"埋点模板及分析报告,支持开发者分服务器查看用户付费.留存等指标,可进一步评估不同服务器的玩家质量: ◆ 新增营销活动报告,可查看广告任务带来的 ...
- 解决.net Core中WebApi自动Model验证导致数据格式不能统一
简言: 最近做项目用WebAPI Core时,想把返回数据的格式,统一弄成:{"errorMsg":"xxx","Data":"x ...
- 基于Unet+opencv实现天空对象的分割、替换和美化
传统图像处理算法进行"天空分割"存在精度问题且调参复杂,无法很好地应对云雾.阴霾等情况:本篇文章分享的"基于Unet+opencv实现天空对象的分割.替换和 ...
- tornado原理介绍及异步非阻塞实现方式
tornado原理介绍及异步非阻塞实现方式 以下内容根据自己实操和理解进行的整理,欢迎交流~ 在tornado的开发中,我们一般会见到以下四个组成部分. ioloop: 同一个ioloop实例运行在一 ...
- python之路22 hashlib、subprocess、logging模块
hashlib加密模块 hashlib模块为不同的安全哈希/安全散列(Secure Hash Algorithm)和 信息摘要算法(Message Digest Algorithm)实现了一个公共的. ...
- 毫米波雷达 TI IWR1443 初体验
文章目录 1 前言 2 准备工作 2.1 mmWave SDK 2.2 Code Composer Studio(CCS) 2.3 Uniflash 2.4 MATLAB runtime 2.5 TI ...