题目传送门

时间限制: 1Sec 内存限制: 128MB 提交: 423 解决: 94

题目描述
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

思路
dfs记忆化搜索,这题要考虑的参数:宝物的大小和个数
所以我们要四个参数;另外由于宝物的大小可能为0,所以要初始为
-1,则dp里面要+1;
或者用dp;dp[i][j][k][c]为走到(i,j)的时候,手上共K个物品,最大价值小于c
具体看代码。 代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1e9+;
int n,m,kk;
ll dp[][][][];
int a[][]; ll dfs(int x,int y,int num,int c)
{
if(dp[x][y][num][c+]!=-) return dp[x][y][num][c+];
if(x==n&&y==m) {
if(num==kk) return ;
if(num==kk-&&a[x][y]>c) return ;
}
ll ans=;
if(x<n)
{
if(a[x][y]>c) ans+=(dfs(x+,y,num+,a[x][y]))%mod;
ans%=mod;
ans+=(dfs(x+,y,num,c))%mod;
ans%=mod;
}
if(y<m)
{
if(a[x][y]>c) ans+=(dfs(x,y+,num+,a[x][y]))%mod;
ans%=mod;
ans+=(dfs(x,y+,num,c))%mod;
ans%=mod;
} return dp[x][y][num][c+]=ans;
}
int main()
{
while(~scanf("%d %d %d",&n,&m,&kk))
{
memset(dp,-,sizeof(dp));
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
scanf("%d",&a[i][j]);
}
}
printf("%lld\n",dfs(,,,-));//注意这里要初始为-1
}
return ;
}

dfs记忆化搜索

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define mod 1000000007
#define N 55
int n,m,kk;
int a[N][N];
ll dp[N][N][][]; int main()
{
while(~scanf("%d %d %d",&n,&m,&kk))
{
memset(a,,sizeof(a));
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
scanf("%d",&a[i][j]);
}
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
for(int k=;k<=kk;k++)
{
for(int c=;c<;c++)
{
ll na=,buna=;
if(i==&&j==){
if(!k||(k==&&c>a[i][j]))dp[i][j][k][c]=;
continue;
}
if(k&&c>a[i][j])na=dp[i-][j][k-][a[i][j]]+dp[i][j-][k-][a[i][j]];
buna=dp[i-][j][k][c]+dp[i][j-][k][c];
dp[i][j][k][c]=na+buna;
dp[i][j][k][c]%=mod;
}
}
}
}
printf("%lld\n",dp[n][m][kk][]);
}
return ;
}

dp

 

问题 1436: 地宫取宝 (dp)的更多相关文章

  1. 蓝桥杯历届试题 地宫取宝 dp or 记忆化搜索

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

  2. 2014 蓝桥杯 预赛 c/c++ 本科B组 第九题:地宫取宝(12') [ dp ]

      历届试题 地宫取宝   时间限制:1.0s   内存限制:256.0MB     锦囊1   锦囊2   锦囊3   问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件 ...

  3. 地宫取宝|2014年蓝桥杯B组题解析第九题-fishers

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

  4. 【蓝桥杯真题】地宫取宝(搜索->记忆化搜索详解)

    链接 [蓝桥杯][2014年第五届真题]地宫取宝 题目描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被 ...

  5. 算法笔记_174:历届试题 地宫取宝(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明 ...

  6. 蓝桥杯 2014本科C++ B组 地宫取宝 DFS+记忆化搜索

    历届试题 地宫取宝   时间限制:1.0s   内存限制:256.0MB 问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角 ...

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

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

  8. ACwing1212. 地宫取宝

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

  9. Java实现 蓝桥杯 历届试题 地宫取宝

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

随机推荐

  1. OGG-01161

    Bad column index (35) specified for table user.table_name, max columns = 35. 原因:源端表结构发生了变更 解决办法:1.如果 ...

  2. [NOIP2009]最优贸易(图论)

    [NOIP2009]最优贸易 题目描述 CC 国有 \(n\) 个大城市和 \(m\) 条道路,每条道路连接这 \(n\) 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 \(m\ ...

  3. java并发学习--第六章 线程之间的通信

    一.等待通知机制wait()与notify() 在线程中除了线程同步机制外,还有一个最重要的机制就是线程之间的协调任务.比如说最常见的生产者与消费者模式,很明显如果要实现这个模式,我们需要创建两个线程 ...

  4. 线程工具类 - CyclicBarrier(循环栅栏)

    CyclicBarrier官方文档 一.原理 CyclicBarrier是另外一种多线程并发控制实用工具.它和CountDownLatch非常类似,它也可以实现线程的计数等待,但它的功能比CountD ...

  5. Flutter-Boxdecoration邊框線, 圓角

    decoration: BoxDecoration( borderRadius: BorderRadius.circular(8), border: Border( top: BorderSide( ...

  6. Java中最基本的集合接口:初识Collection

    Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements). 一些 Collection允许相同的 ...

  7. 项目中dubbo的标准配置

    # Spring boot applicationspring: application: name: hello-dubbo-service-user-provider # UserService ...

  8. RMQ Message ACK

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11808680.html 消息持久化机制 消息丢失了,需要将队列持久化,即将autoDelete设置成f ...

  9. 【Python】安装Python3,打印HelloWorld

    安装地址: https://www.python.org/ 安装时勾选添加path然后一路next,搞定! 查看是否安装成功: cmd中输入python出现如下界面 在vscode中新建一个Hello ...

  10. Maven私服:Docker安装nexus3

    查找nexus3镜像 docker search nexus   拉取nexus3镜像 docker pull docker.io/sonatype/nexus3 查看镜像 docker images ...