题目描述
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 3 2
1 2 3
2 1 5
样例输出
14
思路:像这种取模的操作,就考虑数学,dp,记忆化就可以了,一般逃不过这三种。
对于这个题目,我用的是记忆化搜索。dp[x][y][k][_max]代表的是走到坐标(x,y)时,拿了k件宝物,最大值是_max的方案数,条件限制,每一个坐标必须要考虑拿了多少件、最大值是多少这两个因素。然后去搜索就可以了,如果遇到处理过的情况就直接返回就可以了。
代码如下:

#include<bits/stdc++.h>
#define ll long long
#define mod 1000000007
using namespace std;const int maxx=51;
int a[maxx][maxx];
ll dp[maxx][maxx][maxx][15];
int n,m,k;inline int dfs(int x,int y,int num,int _max)
{if(dp[x][y][num][_max+1]!=-1) return dp[x][y][num][_max+1];if(x==n&&y==m){if(num==k-1&&a[x][y]>_max) return dp[x][y][num+1][_max+1]=1;else if(num==k) return dp[x][y][num][_max+1]=1;return dp[x][y][num][_max+1]=0;}if(x<1||x>n||y<1||y>m) return 0;ll s=0;if(a[x][y]>_max){s+=dfs(x+1,y,num+1,a[x][y]);s+=dfs(x,y+1,num+1,a[x][y]);}s+=dfs(x+1,y,num,_max);s+=dfs(x,y+1,num,_max);return dp[x][y][num][_max+1]=s%mod;
}
int main()
{scanf("%d%d%d",&n,&m,&k);memset(dp,-1,sizeof(dp));for(int i=1;i<=n;i++)for(int j=1;j<=m;j++) scanf("%d",&a[i][j]);cout<<dfs(1,1,0,-1)<<endl;return 0;
}

努力加油a啊,(o)/~

[蓝桥杯][2014年第五届真题]地宫取宝(记忆化搜索)相关推荐

  1. [蓝桥杯][2014年第五届真题]地宫取宝

    题目描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...

  2. 问题 1819: [蓝桥杯][2014年第五届真题]Log大侠

    问题 1819: [蓝桥杯][2014年第五届真题]Log大侠 时间限制: 1Sec 内存限制: 128MB 提交: 236 解决: 173 题目描述  atm参加了速算训练班,经过刻苦修炼,对以2为 ...

  3. 蓝桥杯.地宫取宝(记忆化搜索)

    Question: Solve: a.第一眼审题看到从左上角走到右下角,dfs b.再继续看题目,有限定条件: 1.走到一个位置依据已拿宝物的最大价值 maxn 选择是否拿宝 2.只有走到右下角且拿宝 ...

  4. 蓝桥杯2014年第五届真题-六角填数

    题目 如图所示六角形中,填入1~12的数字. 使得每条直线上的数字之和都相同. 图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少? 请通过浏览器提交答案,不要填写多余的内容. 题解 全 ...

  5. [蓝桥杯][2014年第五届真题]排列序数(思维)

    题目描述 如果用a b c d这4个字母组成一个串,有4!=24种,如果把它们排个序,每个串都对应一个序号: abcd 0 abdc 1 acbd 2 acdb 3 adbc 4 adcb 5 bac ...

  6. [蓝桥杯][2014年第五届真题]稍大的串(STL)

    题目描述 串可以按照字典序进行比较.例如: abcd 小于 abdc 如果给定一个串,打乱组成它的字母,重新排列,可以得到许多不同的串,在这些不同的串中,有一个串刚好给定的串稍微大一些.科学地说:它是 ...

  7. [蓝桥杯][2014年第五届真题]生物芯片(数论)

    题目描述 X博士正在研究一种生物芯片,其逻辑密集度.容量都远远高于普通的半导体芯片. 博士在芯片中设计了 n 个微型光源,每个光源操作一次就会改变其状态,即:点亮转为关闭,或关闭转为点亮. 这些光源的 ...

  8. [蓝桥杯][2014年第五届真题]兰顿蚂蚁(模拟)

    题目描述 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其中一格正方形内有一只"蚂蚁". 蚂蚁的头部朝向为:上下左 ...

  9. [蓝桥杯][2014年第五届真题]分糖果-模拟

    题目描述 问题描述 有n个小朋友围坐成一圈.老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏: 每个小朋友都把自己的糖果分一半给左手边的孩子. 一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从 ...

最新文章

  1. .Net应该学什么怎么学(一)
  2. 翻窗户消失的百岁老人/百岁老人跷家去 中文字幕
  3. mysql 集群备份脚本_MysqlBackup
  4. SAP UI5 attachment绑相对url
  5. HDU 5869 Different GCD Subarray Query 树状数组 + 一些数学背景
  6. 奇咔咔机器人教育_奇咔咔机器人教育,提升孩子的注意力
  7. CF891B-Gluttony【构造】
  8. 【渝粤题库】陕西师范大学200711 面向对象方法与C++ 作业
  9. 3.改变 HTML 内容
  10. 十五. Python基础(15)--内置函数-1
  11. C语言(CED)排序算法总结。比较完整和详细
  12. URLConnection类
  13. MSDN官方数据库开发群
  14. 【Android】【移动应用开发】基础知识
  15. 玩转群晖NAS套件系列三:Video Station安装使用保姆级教程!
  16. 40.用创业思维复盘:写技术博客到出书
  17. VS2015编辑图片
  18. 四大服务器系统,四大厂商八路服务器横向对比 谁是王者?
  19. linux yield_带你通俗易懂的了解——Linux线程模型和线程切换
  20. linux shell变量的,linux shell变量解析

热门文章

  1. IOS开发基础之使用XCode12快速生成代码段
  2. java中对象的生存期_Java中对象的生存周期
  3. mysql 优化表的作用_mysql实战优化之三:表优化
  4. Linux虚拟机改中文
  5. Linux的使用(常见)
  6. php mysql 无法查询中文名字_PHP连接MySQL查询中文时显示Notice: Trying to get property of non-object...
  7. 获取某个输入框的字符长度_收藏,最全的字符串函数方法,总有你用到的~
  8. 倒立摆自动起摆_今天起,中山街坊可以去唱K、游泳、看电影、摆喜酒了!
  9. osg中三维模型的位置变换
  10. 图像处理——图像变换