小明有一张藏宝图,上面有m*n个房间,每个房间里面都有一个有一定价值的宝物,小明只能从左上角的房间进入收集宝物,且每次只能向右边或向下边的房间继续寻宝,最终只能从最右下的房间出来。请你帮小明计算下他最多可以收集到多少价值的宝物?

 输入格式:

输入第一行给出两个正整数m,n(1=<m,n<=2000),随后给出m行数据,每行都包括n个正整数,中间用空格分割。

输出格式

输出收集到的最大价值v,题目保证v<10^9。

输入样例

4 4
1 18 9 3
7 10 6 12
5 13 4 15
2 11 8 16

输出样例:

78

 参考代码:

  • 二维动态规划
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<bits/stdc++.h>
#include<string.h>
#include<vector>
#include<unordered_map>
#include<set>using namespace std;
vector<vector<int>>arr(100);
vector<vector<int>>dp(100);int main(void){
int m,n;
cin>>m>>n;
for(int i=0;i<=m;i++){arr[i].resize(n+1);dp[i].resize(n+1);
}
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
cin>>arr[i][j];dp[1][1]=arr[1][1];for(int i=2;i<=n;i++){dp[1][i]=arr[1][i]+dp[1][i-1];dp[i][1]=arr[i][1]+dp[i-1][1];
}
for(int i=2;i<=m;i++){for(int j=2;j<=n;j++){dp[i][j]=arr[i][j]+max(dp[i][j-1],dp[i-1][j]);}
}
cout<<dp[m][n]<<endl;}
  • 一维动态规划(滚动数组)
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<bits/stdc++.h>
#include<string.h>
#include<vector>
#include<unordered_map>
#include<set>using namespace std;
vector<int>dp(100,0);
vector<vector<int>>arr(100);int main(void){
int m,n;
cin>>m>>n;
for(int i=0;i<=m;i++)
arr[i].resize(n+1,0);
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)cin>>arr[i][j];
//初始化
dp[1]=arr[1][1];
for(int i=2;i<=n;i++)
dp[i]=arr[1][i]+dp[i-1];//遍历
for(int i=2;i<=m;i++){dp[1]+=arr[i][1];for(int j=2;j<=n;j++)dp[j]=arr[i][j]+max(dp[j],dp[j-1]);
}
cout<<dp[n]<<endl;
}
  • DFS(递归搜索)
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<bits/stdc++.h>
#include<string.h>
#include<vector>
#include<unordered_map>
#include<set>using namespace std;vector<vector<int>>arr(100);
int a[2][2]={{0,1},{1,0}};
int d[100][100];
int m,n;
void dfs(int i,int j,int c){if(c+arr[i][j]<d[i][j])return ;d[i][j]=c+arr[i][j];if(i==m&&j==n) return;int temp=d[i][j];i=i+a[0][0];j=j+a[0][1];if(i<=m&&j<=n)dfs(i,j,temp);i=i-a[0][0];j=j-a[0][1];i=i+a[1][0];j=j+a[1][1];if(i<=m&&j<=n)dfs(i,j,temp);i=i-a[1][0];j=j-a[1][1];
}
int main(void){
cin>>m>>n;
for(int i=0;i<=m;i++)
arr[i].resize(n+1,0);
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)cin>>arr[i][j];dfs(1,1,0);
cout<<d[m][n]<<endl;}

寻宝游戏(DFS+动态规划)相关推荐

  1. SDOI2015寻宝游戏 dfs序+set

    SDOI2015寻宝游戏 好像是一道虚树入门题? 虚树???不会不会我弱死了.. Solution: 关键点间的最小路径,就是在保证尽量少走重复路的前提下走出来的一条经过所有关键点的路径. 基于这个思 ...

  2. Java算法学习:蓝桥杯——地宫寻宝(DFS+动态规划—记忆型递归)

    Java算法学习:蓝桥杯--地宫寻宝(DFS✖记忆型递归) 题目: 标题:地宫取宝X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签.地宫的入口在左上角,出 ...

  3. [Leetcode][第174题][JAVA][地下城游戏][DFS][动态规划]

    [问题描述][中等] [解答思路] 1. 回溯(暴力)& 优化 超时,需要优化 public int calculateMinimumHP(int[][] dungeon) {if (dung ...

  4. 跳跃游戏 (动态规划剪枝/前缀和/滑动窗口/BFS剪枝)

    一.跳跃游戏简单介绍 1. 跳跃游戏简单介绍 跳跃游戏是一种典型的算法题目,经常是给定一数组arr,从数组的某一位置i出发,根据一定的跳跃规则,比如从i位置能跳arr[i]步,或者小于arr[i]步, ...

  5. 【BZOJ 3991】 [SDOI2015]寻宝游戏

    3991: [SDOI2015]寻宝游戏 Time Limit: 40 Sec Memory Limit: 128 MB Submit: 251 Solved: 137 [Submit][Status ...

  6. 【SDOI2015】【BZOJ3991】寻宝游戏

    Description 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N-1条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩家可以任意选择一个村庄,瞬间转移到这个村庄,然后可 ...

  7. LeetCode--174.地下城游戏(动态规划)

    地下城游戏(动态规划) 1. 题目描述 2. 题目分析 3. C语言实现 1. 题目描述 难度:困难 2. 题目分析 这道题是64.最小路径和的进阶版.但是这一题我们不能从左上向右下的顺序,而是**要 ...

  8. 河北工业大学c语言寻宝游戏,计算机技术基础(c语言)课程设计寻宝游戏.doc

    计算机技术基础(c语言)课程设计寻宝游戏 计算机技术基础(c语言)课程设计 寻宝游戏 #include #include #include #include #include #define ESC ...

  9. hdu 6289 寻宝游戏

    寻宝游戏 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others) Total Sub ...

  10. 寻宝游戏 - 利用iBeacon特性设计的iOS线下寻宝游戏 - 物联网小游戏

    寻宝游戏 - 利用iBeacon特性设计的iOS线下寻宝游戏 作者简介 科科香,程序员 方向:IoT,方案集成,喜好各种新鲜东东 转载请注明出处 iBeacon简介 iBeacon(下面简称Beaco ...

最新文章

  1. onethink后台编辑器 提示:未检测到兼容版本的flash
  2. 技能CDDemo(点击鼠标左键实现技能界面旋转)
  3. apache服务出现Forbidden 403问题的解决方法总结
  4. idm 服务器响应显示您没有权限下载此文件_仅需10分钟,让你掌握下载神器IDM的使用技巧...
  5. 开发者在对项目失去信心后,该做什么?
  6. 浙大计算机基础知识题1,浙大作业1计算机基础知识题.docx
  7. 精心整理全网最全Tomcat面试专题及答案(共19题,含答案解析),tomcat面试看这篇就够了!
  8. opencv3和qt5计算机视觉应用开发pdf_NeurIPS 2019:计算机视觉论文回顾
  9. ios开发 方形到圆的动画_使用UIBezierPath画个圆动画
  10. 在dm355上开发DVR杂记(一):跟ip地址有关
  11. struts2初步学习路线
  12. java把u转换成21_java u 转换成汉字
  13. 使用机器学习算法打造一个简单的“微博指数”
  14. 两个PDF合并成一个PDF怎么做?三分钟教会你两种方法
  15. 【html5期末大作业】基于HTML仿QQ音乐官网网站
  16. 蓝桥杯省赛真题2016题解
  17. 软件企业出口退税计算机题,出口退税计算题解析
  18. 简述人工智能的研究目标
  19. http协议相关内容,C/S与B/S,ip报文,TCP,UDP
  20. JavaWeb --MYSql(MySql基础,MySql高级,JDBC,从类路径下加载输入流对象)

热门文章

  1. 盘点最新BTA大厂的Java程序员的招聘技术标准(一目了然)
  2. 理论+实验:LAMP网站服务器部署(超详细版本)
  3. sis 最新_传统SIS系统面临考验——“可持续的安全仪表系统”来袭
  4. 【小月电子】ALTERA FPGA开发板系统学习教程-LESSON2 LED灯闪烁
  5. import requests
  6. 坎德拉、流明、勒克斯之间的关系
  7. 布局万花筒:UIColletionview
  8. 在Linux中连接和使用云存储的三种途径
  9. 特征提取丨共空间模式 Common Spatial Pattern (CSP)
  10. SwiftUI - @Binding