正题

题目链接:https://jzoj.net/senior/#contest/show/3008/1


题目大意

n∗mn*mn∗m的格子,kkk种颜色涂色,求有多少种方案使得没有任意一条只往右和下的路径经过相同颜色。


解题思路

显然如果n+m−1>kn+m-1>kn+m−1>k就无解,所以n+m−1n+m-1n+m−1最大为101010,考虑搜索。

两个剪枝

  1. 可行性剪枝:如果剩下可用颜色不超过剩下步骤,那么直接退出。
  2. 对称性剪枝:如果有若干种颜色目前都没有使用过,那么这个格子选择任何一种颜色答案是一样的。

codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=15;
int n,m,k,a[N][N],f[N][N],v[N];
int dfs(int x,int y)
{if(y>m) x++,y=1;if(x>n) return 1;int ans=0,tmp=-1,num=0;int z=f[x-1][y]|f[x][y-1];while(z) num++,z-=(z&-z);if(n+m-x-y+1>k-num) return 0;for(int i=1;i<=k;i++){if(a[x][y]&&a[x][y]!=i)continue;if((1<<i-1)&(f[x-1][y]|f[x][y-1])) continue;v[i]++;f[x][y]=f[x-1][y]|f[x][y-1]|(1<<i-1);if(v[i]==1){if(tmp==-1)tmp=dfs(x,y+1);ans+=tmp;}else ans+=dfs(x,y+1);v[i]--;}return ans;
}
int main()
{scanf("%d%d%d",&n,&m,&k);if(n+m-1>k){printf("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]]++;printf("%d",dfs(1,1));
}

jzoj4012-Distinct Paths【搜索】相关推荐

  1. CF293B Distinct Paths题解

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

  2. Xcode增加头文件搜索路径的方法

    Xcode增加头文件搜索路径的方法 以C++工程为例:在Build Settings 页面中的Search Paths一节就是用来设置头文件路径.相关的配置项用红框框起来了,共有三个配置项: Head ...

  3. 优化OpenSearch的搜索结果

    前面介绍了OpenSearch的基本使用(使用OpenSearch为应用提供搜索功能),一个小型的搜索服务很容易搭建.但具体应用到某个业务时,可能我们对默认的搜索结果并不满意,这里介绍下OpenSea ...

  4. These Days

    前几天一直窝在宿舍,没有去机房学习.... 昨天去看了后会无期. 今天重回机房. ........................................................... ...

  5. OI每周刷题记录——lrllrl

    看这标题就知道我是模仿的hzwer大佬,远程%%% 大佬的OI经历让蒟蒻我深受感触,为了晚一些AFO本蒟蒻也得加油了 从高二上期第一周开始计数,每个星期天更一次,一直更到我AFO 如果这是我此生最后一 ...

  6. 第拾壹章學習 Lisp 3rd Edition, Winston Horn

    2019独角兽企业重金招聘Python工程师标准>>> PROPERTIES AND ARRAYS --------------------------------- propert ...

  7. 【解决方法】ld: warning: directory not found for option

    问题及解决方法 简单来说,这个问题分两个方面. 错误如下,这表示是查询 Library 的时候出现的异常. "directory not found for option '-L/-&quo ...

  8. 文献阅读-10X单细胞揭示肿瘤浸润性T细胞的泛癌单细胞图谱

    Pan-cancer single cell landscape of tumor-infiltrating T cells INTRODUCTION 针对肿瘤特异性T细胞的癌症免疫疗法使许多癌症患者 ...

  9. 【Metal学习笔记】--02.调用Metal-cpp从零编写C++程序

    引言 由于Metal API的原生环境是苹果系统,其编写使用的语言基本是object-c(.m格式的文件)或者swift(.swift格式的文件).这两种语言对于c++使用者来说比较陌生,为了解决这个 ...

  10. 问题 H: Hopscotch

    问题 H: Hopscotch 时间限制: 5 Sec  内存限制: 128 MB 提交: 42  解决: 18 [提交][状态][讨论版][命题人:admin] 题目描述 You're playin ...

最新文章

  1. python学习笔记---字符串
  2. C++ leetcode 26. 删除排序数组中的重复项 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
  3. Hyper-v Server动态内存
  4. 关于spark-shell和scala关系的一些个人想法
  5. 排序算法总结(四)快速排序【QUICK SORT】
  6. TX2Ubuntu16.04上安装 kinectV2
  7. centos samba 看不到共享目录_linux入门系列--文件共享之Samba和NFS
  8. python迅雷下载任务出错_迅雷任务出错是怎么回事_迅雷下载一直提示任务出错解决方法-系统城...
  9. RPL(4):RFC6550翻译(4)---RPL的通信流支持RPL实例
  10. java ldc指令_6.Java JVM_4.JVM字节码之整型入栈指令(iconst、bipush、sipush、ldc)
  11. 机器学习集成学习进阶LightGBM算法和案例
  12. TECLAST(台电)双系统板tPAD点评
  13. 12个scp命令传输文件的例子
  14. 学java的就业方向_学Java以后的就业方向
  15. 线程和进程的区别 线程和进程有什么不同
  16. 计算机和共享打印机不在一个网络打印机共享,不在同一个局域网怎么样设置打印机共享...
  17. 二叉树思想实现的计算器
  18. mysql 空集 赋值_如何在MySQL查询中替换“空集”?
  19. c语言转换为stc程序,STC51单片机入门(C语言)
  20. ThinkPHP使用方法小记

热门文章

  1. python导包路径问题_python的导包问题
  2. mysql 5.7.17 源码安装_mysql5.7.17源码安装
  3. 从像素坐标到相机坐标_鱼眼相机模型EUCM(一)
  4. python求解微分方程组_python – SymPy / SciPy:求解具有不同变量的常微分方程组...
  5. java并发之CAS
  6. leetcode279. 完全平方数
  7. 『软件测试5』测开岗只要求会黑白盒测试?NO!还要学会性能测试!
  8. js变量和java变量相等,js中变量和jsp中java代码中变量互相访问解决方案
  9. [蓝桥杯2018初赛]递增三元组-双指针,枚举,排序,前缀和
  10. 网络原理题+复习资料