历届试题 地宫取宝  
时间限制: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
例子输出

dp[x][y][num][maxValue]  代表走到(x,y)位置的时候手里持有num个宝贝并且最大值为maxValue的方案数.

该数组一開始初始化为-1.

#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstring>
using namespace std;
#define eps 10e-10
#define N 1000000007
int ans;
int d[51][51][13][14];
int p[51][51];
int n,m,k;
int dfs(int x,int y,int num,int maxvalue){
if(d[x][y][num][maxvalue+1] != -1){//表示这个状态已经訪问过了,方案数已经确定了.
return d[x][y][num][maxvalue+1];
}
int t = 0;
if(x == n-1 && y == m-1){
if(num==k||(num==k-1&&p[x][y]>maxvalue))
return d[x][y][num][maxvalue+1] = 1;
else
return d[x][y][num][maxvalue+1] = 0;
}
if(x + 1 < n){
if(p[x][y] > maxvalue){
t += dfs(x+1,y,num+1,p[x][y]);
t %= N;
}
t += dfs(x+1,y,num,maxvalue);
t %= N;
}
if(y + 1 < m){
if(p[x][y] > maxvalue){
t += dfs(x,y+1,num+1,p[x][y]);
t %= N;
}
t += dfs(x,y+1,num,maxvalue);
t %= N;
}
d[x][y][num][maxvalue+1] = t;
return d[x][y][num][maxvalue+1];
}
int main(){
while(cin>>n>>m>>k){
for(int i = 0; i < n; ++i){
for(int j = 0; j < m; ++j)
cin>>p[i][j];
}
memset(d,-1,sizeof(d));
d[0][0][0][0] = dfs(0,0,0,-1);//由于宝贝的最小价值能够为0
cout<<d[0][0][0][0]<<endl;
}
return 0;
}

蓝桥杯 地宫寻宝 带缓存的DFS的更多相关文章

  1. 蓝桥杯 地宫寻宝 DFS 动态规划

    #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <cstdio> #include <cstdl ...

  2. 蓝桥杯之剪格子(经典dfs)

    如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20|30* 1| *******--+ | 1| 2| 3| +--+--+-- ...

  3. 蓝桥杯 历届试题 网络寻路(dfs搜索合法路径计数)

    X 国的一个网络使用若干条线路连接若干个节点.节点间的通信是双向的.某重要数据包,为了安全起见,必须恰好被转发两次到达目的地.该包可能在任意一个节点产生,我们需要知道该网络中一共有多少种不同的转发路径 ...

  4. 蓝桥杯历届试题 危险系数(dfs或者并查集求无向图关于两点的割点个数)

    Description 抗日战争时期,冀中平原的地道战曾发挥重要作用. 地道的多个站点间有通道连接,形成了庞大的网络.但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系. 我们来定义一个 ...

  5. 蓝桥杯 历届试题 剪格子(dfs搜索)

    历届试题 剪格子 时间限制:1.0s   内存限制:256.0MB 问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |* || +--****--+ ||* | ** ...

  6. 蓝桥杯---地宫取宝(记忆搜索=搜索+dp)

    题目网址:http://lx.lanqiao.org/problem.page?gpid=T120 问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值 ...

  7. 蓝桥杯 算法提高 8皇后·改 -- DFS 回溯

      算法提高 8皇后·改   时间限制:1.0s   内存限制:256.0MB      问题描述 规则同8皇后问题,但是棋盘上每格都有一个数字,要求八皇后所在格子数字之和最大. 输入格式 一个8*8 ...

  8. 蓝桥杯练习系统历届试题 带分数 dfs

    问题描述 100 可以表示为带分数的形式:100 = 3 + 69258 / 714. 还可以表示为:100 = 82 + 3546 / 197. 注意特征:带分数中,数字1~9分别出现且只出现一次( ...

  9. 蓝桥杯-历届试题 剪格子(dfs)

    历届试题 剪格子   时间限制:1.0s   内存限制:256.0MB        问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+|10* 1|52|+--**** ...

随机推荐

  1. C++学习_继承覆盖重载

    今天通过对实验二继承,重载,覆盖的学习,让我更深一步理解了这些概念的区别. 首先来明确一个概念,函数名即地址,也就是说函数名就是个指针. 编译阶段,编译器为每个函数的代码分配一个地址空间并编译函数代码 ...

  2. cut - 在文件的每一行中提取片断

    总览 (SYNOPSIS) ../src/cut [OPTION]... [FILE]... 描述 (DESCRIPTION) 在 每个文件 FILE 的 各行 中, 把 提取的 片断 显示在 标准输 ...

  3. CAD参数绘制点(com接口)

    点在CAD中的作用除了可以分割对象外,还能测量对象,点不仅表示一个小的实体,而且通过点作为绘图的参考标记. pdmode是一个控制point的形式的系统变量,当pdmode=0时是可见的一个点,当pd ...

  4. mysql group_concat函数详解

    group_concat( [DISTINCT]  要连接的字段   [Order BY 排序字段 ASC/DESC]   [Separator '分隔符'] ) 1. --以id分组,把price字 ...

  5. TortoiseSVN文件夹操作

    (1).安装SVN·客户端 (2) 建立库: 1.新建文件夹,目录和文件夹名称最好都用英文,不要使用中文: 2.打开文件夹,在空白处按下“shift键+鼠标右键”: 3.在弹出的菜单中选择“Torto ...

  6. Java中的JVM的内存结构

    Java的虚拟机自身结构图: JVM内存结构主要包括两个子系统和两个组件.两个子系统分别是Classloader子系统和Executionengine(执行引擎)子系统:两个组件分别是Runtimed ...

  7. javascript的prototype经典使用场景

    prototype的经典使用场景就是为对象增加属性和方法,如给自定义的Man对象增加个姓名属性和语言方法: function man() {        this.age = "22&qu ...

  8. Android首页轮播图直接拿来用

    import java.util.ArrayList; import java.util.List; import java.util.concurrent.Executors; import jav ...

  9. Git 教程 -- 第一天

    什么是Git? Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. 为什么使用Git? 众所周知,版本控制系统分为集中式版本控制系统(SVN.CVS等)与分布式版 ...

  10. Java权限管理(授权与认证)

    CRM权限管理 有兴趣的同学也可以阅读我最近分享的:Shiro框架原理分析   (PS : 这篇博客里面介绍了使用Shiro框架的方式实现权限管理) https://www.cnblogs.com/y ...