洛谷——P2049 魔术棋子
P2049 魔术棋子
题目描述
在一个M*N的魔术棋盘中,每个格子中均有一个整数,当棋子走进这个格子中,则此棋子上的数会被乘以此格子中的数。一个棋子从左上角走到右下角,只能向右或向下行动,请问此棋子走到右下角后,模(mod)K可以为几?
如以下2*3棋盘:
3 4 4
5 6 6
棋子初始数为1,开始从左上角进入棋盘,走到右下角,上图中,最后棋子上的数可能为288,432或540。所以当K = 5时,可求得最后的结果为:0,2,3。
输入输出格式
输入格式:
输入文件magic.in第一行为三个数,分别为M,N,K (1 ≤ M,N,K ≤ 100)以下M行,每行N个数,分别为此方阵中的数。
输出格式:
输出文件magic.out第一行为可能的结果个数
第二行为所有可能的结果(按升序输出)
输入输出样例
Magic.in 2 3 5 3 4 4 5 6 6
3 0 2 3
#include<queue> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; priority_queue<int,vector<int>,greater<int> >q; ][]; ][],vis[]; ]={,},yy[]={,}; int read() { ,f=; char ch=getchar(); ; ch=getchar();} +ch-'; ch=getchar();} return x*f; } void dfs(int x,int y,int s) { if(x==n&&y==m) { if(vis[s]) return ; vis[s]=true,ans++; q.push(s);return ; } ;i<;i++) { int fx=x+xx[i],fy=y+yy[i]; &&fy>&&fx<=n&&fy<=m&&!vist[fx][fy]) { vist[fx][fy]=true; dfs(fx,fy,(s*a[fx][fy])%mod); vist[fx][fy]=false; } } } int main() { n=read(),m=read(),mod=read(); ;i<=n;i++) ;j<=m;j++) a[i][j]=read(),a[i][j]%=mod; dfs(,,a[][]); printf("%d\n",ans); while(!q.empty()) { n=q.top(); q.pop(); printf("%d ",n); } ; }
20分TLE的dfs
#include<queue> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; ][]; ]={,},yy[]={,}; ][][],vis[]; priority_queue<int,vector<int>,greater<int> >q; int read() { ,f=; char ch=getchar(); ; ch=getchar();} +ch-'; ch=getchar();} return x*f; } void dfs(int x,int y,int s) { if(x==n&&y==m) { if(vis[s]) return ; vis[s]=true,ans++; q.push(s);return ; } if(vist[x][y][s]) return ; vist[x][y][s]=true; ;i<;i++) { int fx=x+xx[i],fy=y+yy[i]; &&fy>&&fx<=n&&fy<=m) dfs(fx,fy,(s*a[fx][fy])%mod); } // vist[x][y][s]=false; } int main() { n=read(),m=read(),mod=read(); ;i<=n;i++) ;j<=m;j++) a[i][j]=read(),a[i][j]%=mod; dfs(,,a[][]); printf("%d\n",ans); while(!q.empty()) { n=q.top(); q.pop(); printf("%d ",n); } ; }
AC的记忆化搜索
#include<queue> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; ][][]; ][]; int read() { ,f=; char ch=getchar(); ; ch=getchar();} +ch-'; ch=getchar();} return x*f; } int main() { n=read(),m=read(),k=read(); ;i<=n;i++) ;j<=m;j++) a[i][j]=read(),a[i][j]%=k; dp[][][a[][]]=true; ;i<=n;i++) ;j<=m;j++) ;s<k;s++) if(!dp[i][j][s*a[i][j]%k]) dp[i][j][s*a[i][j]%k]=dp[i][j-][s]||dp[i-][j][s]; ;i<k;i++) if(dp[n][m][i]) ans++; printf("%d\n",ans); ;i<k;i++) if(dp[n][m][i]) printf("%d ",i); ; }
dp
洛谷——P2049 魔术棋子的更多相关文章
- 洛谷 P2049 魔术棋子
P2049 魔术棋子 题目描述 在一个M*N的魔术棋盘中,每个格子中均有一个整数,当棋子走进这个格子中,则此棋子上的数会被乘以此格子中的数.一个棋子从左上角走到右下角,只能向右或向下行动,请问此棋子走 ...
- 洛谷—— P2049 魔术棋子
https://www.luogu.org/problem/show?pid=2049 题目描述 在一个M*N的魔术棋盘中,每个格子中均有一个整数,当棋子走进这个格子中,则此棋子上的数会被乘以此格子中 ...
- 洛谷 P2049 魔术棋子(vector)
题目传送门 解题思路: 用一个vector维护每一个点都可以乘出哪些数来,然后将(n,m)的所有数从小到大输出即可. 要用一个bool ff[j][k]来维护当前这个点(i,j)里面有没有被放过k,以 ...
- P2049 魔术棋子
题目描述 在一个M*N的魔术棋盘中,每个格子中均有一个整数,当棋子走进这个格子中,则此棋子上的数会被乘以此格子中的数.一个棋子从左上角走到右下角,只能向右或向下行动,请问此棋子走到右下角后,模(mod ...
- 洛谷P3158 放棋子 [CQOI2011] dp+数论
正解:dp+数论 解题报告: 传送门! 考虑对每种颜色的棋子单独考虑鸭,那显然有,当某一行或某一列已经被占据的时候,那一行/一列就不能再放别的颜色的棋子了,相当于直接把那一行/一列直接消了 显然就能考 ...
- 洛谷 P2765 魔术球问题 解题报告
P2765 魔术球问题 题目描述 问题描述: 假设有\(n\)根柱子,现要按下述规则在这\(n\)根柱子中依次放入编号为\(1,2,3,\dots\)的球. \((1)\) 每次只能在某根柱子的最上面 ...
- 洛谷 P2765 魔术球问题 (dinic求最大流,最小边覆盖)
P2765 魔术球问题 题目描述 «问题描述: 假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为1,2,3,...的球. (1)每次只能在某根柱子的最上面放球. (2)在同一根柱子中,任何2 ...
- 洛谷 [P2765] 魔术球问题
贪心做法 每次尽可能选择已经放过球的柱子 #include <iostream> #include <cstdio> #include <cstring> #inc ...
- 洛谷P3159 交换棋子 神奇的网络流
神奇的建模...原题链接 如果你真的把交换看成交换,就\(GG\)了.首先我们要把交换看成是白棋的移动. 然后,很容易的就想到建模的大致思路:建立超级源点S和超级汇点T,从S向初始局面每个白棋所在的格 ...
随机推荐
- C01 C语言基础
目录 C语言简史及特点 C语言开发环境 C语言程序结构 C语言基本输入输出函数 编译 软件类型 C语言简要及特点 什么是计算机语言 计算机语言是用于人与计算机之间通讯的语言. 计算机遵照接收到的计算机 ...
- Delphi 中内存映射对于大文件的使用
这篇文章主要介绍了Delphi 中内存映射对于大文件的使用的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下 Delphi 中内存映射对于大文件的使用 平时很少使用大文件的内存映射,碰巧遇到了 ...
- javascript(函数式编程思考) ---> Map-Filter-quicksort-Collatz序列-Flodl-Flodr
let add = x=>x+1; //Map :: ( a -> b) -> [a] -> [b] let Map = function(f,arr){ //闭包存储累积对象 ...
- Spring Boot + Mybatis + Druid 动态切换多数据源
在大型应用程序中,配置主从数据库并使用读写分离是常见的设计模式. 在Spring应用程序中,要实现读写分离,最好不要对现有代码进行改动,而是在底层透明地支持. 这样,就需要我们再一个项目中,配置两个, ...
- Python赋值运算及流程控制
1. 内置函数 1> len:统计元素长度 str1 = 'wonderful' print(len(str1)) result: li = [,,] print(len(li)) result ...
- 【转发】【linux】【php】centos 编译php常见错误
configure: error: xml2-config not found. Please check your libxml2 installation. yum install libxml2 ...
- ASP.NET MVC中如何在当前页面上弹出另外一个页面
注意:不是链接到另一个页面,而是弹出一个页面,当前的页面和弹出页面都存在于浏览器的同一个标签页中,效果如图: 弹出的窗体置于四大天王页面之上,但是无法继续操作底层的页面,代码如下: function ...
- Python 输出命令行进度条
在使用 pip 安装时,你会发现有下载进度条,我们也可以借助开源的第三方库来实现这个功能,在项目输出时增加一些可视化效果. 一个简单易用的第三方库是:progress 作者提供了动图很直观地展现了实现 ...
- HTML、CSS知识点总结_D
一,html+css基础 1-1 Html和CSS的关系 学习web前端开发基础技术需要掌握:HTML.CSS.JavaScript语言.下面我们就来了解下这三门技术都是用来实现什么的: 1. HTM ...
- 电子邮件中的to、cc、bcc
电子邮件中的to.cc(carbon copy)和bcc(blind carbon copy),分别是收件人.抄送.密送 to 收件人 你想要给其发邮件的人 cc 抄送人 cc和to是一样的,但是cc ...