地宫取宝 (dfs+dp深搜)
来源:互联网 发布:mac奶瓶粉底液好用吗 编辑:程序博客网 时间:2024/05/20 01:08
地宫取宝
时间限制: 1 Sec 内存限制: 128 MB提交: 4 解决: 3
[提交][状态][讨论版]
题目描述
历届试题 地宫取宝
时间限制:1.0s 内存限制:256.0MB
问题描述
X 国王有一个地宫宝库。是 n x m 个格子的矩阵。每个格子放一件宝贝。每个宝贝贴着价值标签。
地宫的入口在左上角,出口在右下角。
小明被带到地宫的入口,国王要求他只能向右或向下行走。
走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿)。
当小明走到出口时,如果他手中的宝贝恰好是k件,则这些宝贝就可以送给小明。
请你帮小明算一算,在给定的局面下,他有多少种不同的行动方案能获得这k件宝贝。
输入格式
输入一行3个整数,用空格分开:n m k (1< =n,m< =50, 1< =k< =12)
接下来有 n 行数据,每行有 m 个整数 Ci (0< =Ci< =12)代表这个格子上的宝物的价值
输出格式
要求输出一个整数,表示正好取k个宝贝的行动方案数。该数字可能很大,输出它对 1000000007 取模的结果。
样例输入
2 2 2
1 2
2 1
样例输出
2
样例输入
2 3 2
1 2 3
2 1 5
样例输出
14
时间限制:1.0s 内存限制:256.0MB
问题描述
X 国王有一个地宫宝库。是 n x m 个格子的矩阵。每个格子放一件宝贝。每个宝贝贴着价值标签。
地宫的入口在左上角,出口在右下角。
小明被带到地宫的入口,国王要求他只能向右或向下行走。
走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿)。
当小明走到出口时,如果他手中的宝贝恰好是k件,则这些宝贝就可以送给小明。
请你帮小明算一算,在给定的局面下,他有多少种不同的行动方案能获得这k件宝贝。
输入格式
输入一行3个整数,用空格分开:n m k (1< =n,m< =50, 1< =k< =12)
接下来有 n 行数据,每行有 m 个整数 Ci (0< =Ci< =12)代表这个格子上的宝物的价值
输出格式
要求输出一个整数,表示正好取k个宝贝的行动方案数。该数字可能很大,输出它对 1000000007 取模的结果。
样例输入
2 2 2
1 2
2 1
样例输出
2
样例输入
2 3 2
1 2 3
2 1 5
样例输出
14
#include<stdio.h>#include<algorithm>#include<string.h>using namespace std;const int inf=1000000007;int n,m,k1,a[105][105],c[2][2]={{1,0},{0,1}},dp[55][55][20][20];//dp数组存坐标,当前max,个数bool f(int x,int y){//判断if(x>=1&&x<=n&&y>=1&&y<=m)return true;elsereturn false;}int dfs(int x,int y,int max,int k)//搜索{int x1,y1,i,j;if(dp[x][y][max+1][k]!=-1)//如果已经算过就不在算了,节省时间就在这个地方return dp[x][y][max+1][k];if(x==n&&y==m) { if(k==k1)return dp[x][y][max+1][k]=1;else if(a[x][y]>max&&k==k1-1) return dp[x][y][max+1][k]=1;elsereturn dp[x][y][max+1][k]=0; } long long ans=0;for(i=0;i<=1;i++){x1=x+c[i][0]; y1=y+c[i][1]; if(f(x1,y1)) { if(a[x][y]>max) { ans+=dfs(x1,y1,a[x][y],k+1); ans%=inf; } ans+=dfs(x1,y1,max,k); ans%=inf;}}return dp[x][y][max+1][k]=ans%inf;} int main(){ scanf("%d%d%d",&n,&m,&k1); for (int i = 1; i<=n; i++) { for (int j = 1; j <=m; j++) { scanf("%d",&a[i][j]); } } memset(dp,-1,sizeof(dp)); dfs(1,1,-1,0);//之所以max为-1,是因为有的宝石价值可能为0,如果写0的话走不到值为点 printf("%d",dp[1][1][0][0]); }
阅读全文
0 0
- 地宫取宝 (dfs+dp深搜)
- 历届试题 地宫取宝 (DP+记忆化DFS)
- 地宫取宝(dp)
- 地宫取宝 (DFS+记忆化)
- 地宫取宝 dfs 记忆化搜索 简单dp
- 历届试题 地宫取宝 (DP)
- 蓝桥杯 地宫取宝 (DP)
- 历届试题 地宫取宝 (较难DFS或DP递推)
- [dp] 蓝桥杯 地宫取宝
- 蓝桥杯 地宫取宝 DP
- 蓝桥杯 地宫取宝 (DFS&记忆化搜索)
- 蓝桥杯+地宫取宝(动态规划+DFS)
- 蓝桥杯 PREV-28地宫取宝【DFS】
- 蓝桥杯---地宫取宝(记忆搜索=搜索+dp)
- 历届试题 地宫取宝 (dfs 记忆化)
- 蓝桥杯 地宫取宝(DFS+记忆化搜索)
- 蓝桥杯历届试题——地宫取宝 (记忆化dp)
- 蓝桥历届试题-地宫取宝DP
- react native 的坑
- Python-爬取音悦台MV列表以及反爬虫方法
- MapReduce的架构组成
- Angular4 绑定html内容 警告处理
- 也算是第一次开通博客
- 地宫取宝 (dfs+dp深搜)
- UVA1640TheCountingProblem
- 练习1-2 做个实验,当printf函数的参数字符串中包含\c(其中c是上面的转义字符未曾列出的某一个字符)时,观察一下输出
- JavaScript 资源大全中文版
- python的学习
- angular4路由基础运用
- dubbo-1
- 巧妙的实现多个进程同时跑的问题~买票系统
- 小白的蚁群算法学习总结