地宫取宝dfs

在这里插入图片描述

分析:

矩阵里的每一个位置都有标记,要求的问题是:有几种方法能完成这个规定。
那么,我们只需要计算从开始(1,1)到最后(n,m)的深度优先搜索中,有几个是满足要求的即为正确答案。
有个要求是,如果一个格子中的价值比已经拿的都大,那么可以选择拿或者不拿,这里就有两种情况,一个是以手中的最大值mx做标准,另一种是以c[i][j]做标准,两种情况。

代码示例:

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 55,p=1e9+7;
int n,m,k,c[N][N]; 
int dx[]={0,1};
int dy[]={1,0};
int dp[N][N][15][15];
bool inmp(int x,int y){
	return (x>=1&&x<=n&&y>=1&&y<=m);
}
ll dfs(int x,int y,int mx,int cnt){
	if(x==n&&y==m)return cnt==k;
	if(dp[x][y][mx][cnt]!=-1)return dp[x][y][mx][cnt];
	ll res=0;
	for(int i=0;i<2;i++){
		int nx=x+dx[i];
		int ny=y+dy[i];
		if(!inmp(nx,ny))continue;
		// 拿这个 
		if(c[nx][ny]>mx&&cnt<k)res=(res+dfs(nx,ny,c[nx][ny],cnt+1))%p;
		// 不拿这个
		res=(res+dfs(nx,ny,mx,cnt))%p;
	}
	return dp[x][y][mx][cnt]=res;
}
int main(){
	ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
	memset(dp,-1,sizeof(dp));
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			cin>>c[i][j];
			c[i][j]++;
		}
	
	cout<<(dfs(1,1,0,0)+dfs(1,1,c[1][1],1))%p;
	return 0;
}
/*
	可以设置状态dp[x][y][mx][cnt]
	表示走到(x,y),手中有cnt个宝贝且最大值为mx的方案数 
	
*/

相关推荐

  1. DFS进阶——

    2024-03-24 18:32:02       16 阅读
  2. 每日算法打卡: day 16

    2024-03-24 18:32:02       24 阅读
  3. L2-048 寻图 (DFS做法)

    2024-03-24 18:32:02       20 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-24 18:32:02       14 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-24 18:32:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-24 18:32:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-24 18:32:02       18 阅读

热门阅读

  1. 【2024-03-18】顺丰春招笔试两道编程题解

    2024-03-24 18:32:02       18 阅读
  2. 【串口开发】android 智能设备开发 知识笔记

    2024-03-24 18:32:02       20 阅读
  3. 学习笔记 | 微信小程序项目day06

    2024-03-24 18:32:02       21 阅读
  4. mysql基础02

    2024-03-24 18:32:02       14 阅读
  5. Kafka系列之:Exactly-once support

    2024-03-24 18:32:02       17 阅读
  6. 海量数据处理和提高系统的并发能力的一些方案

    2024-03-24 18:32:02       20 阅读
  7. 如何在ubuntu 18.04中升级python 3.6到3.7

    2024-03-24 18:32:02       19 阅读
  8. CCSK-云计算安全基础知识认证

    2024-03-24 18:32:02       18 阅读
  9. OpenCV中如何进行模板匹配?

    2024-03-24 18:32:02       19 阅读
  10. 解释C语言中的函数及其参数传递方式

    2024-03-24 18:32:02       21 阅读
  11. 深入理解PHP+Redis实现分布式锁的相关问题

    2024-03-24 18:32:02       15 阅读
  12. 樊登读书-《终生成长》【视频笔记 +个人思考】

    2024-03-24 18:32:02       16 阅读
  13. Postman使用json进行接口关联

    2024-03-24 18:32:02       18 阅读
  14. vue前端面试题

    2024-03-24 18:32:02       13 阅读