先上题目:

Labyrinth

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2911    Accepted Submission(s): 1007

Problem Description
度度熊是一只喜欢探险的熊,一次偶然落进了一个m*n矩阵的迷宫,该迷宫只能从矩阵左上角第一个方格开始走,只有走到右上角的第一个格子才算走出迷宫,每一次只能走一格,且只能向上向下向右走以前没有走过的格子,每一个格子中都有一些金币(或正或负,有可能遇到强盗拦路抢劫,度度熊身上金币可以为负,需要给强盗写欠条),度度熊刚开始时身上金币数为0,问度度熊走出迷宫时候身上最多有多少金币?
Input
输入的第一行是一个整数T(T < 200),表示共有T组数据。
每组数据的第一行输入两个正整数m,n(m<=100,n<=100)。接下来的m行,每行n个整数,分别代表相应格子中能得到金币的数量,每个整数都大于等于-100且小于等于100。
Output
对于每组数据,首先需要输出单独一行”Case #?:”,其中问号处应填入当前的数据组数,组数从1开始计算。
每组测试数据输出一行,输出一个整数,代表根据最优的打法,你走到右上角时可以获得的最大金币数目。
Sample Input
2
3 4
1 -1 1 0
2 -2 4 2
3 5 1 -90
2 2
1 1
1 1

Sample Output
Case #1: 18
Case #2: 4
中文题意不解释,思路:DP,有点像数塔,就是转移的时候需要做的步骤多了一点。在每一次转移去下一层之前需要确定当前一层的每一格三个值,①从上面一层转移到这一个的最大值,②从当前格左边转移过来的最大值,③从当前格右边转移过来的最大值。
分析可知,从当前格左边转移到当前格只于当前格左边的格子有关,从当前格右边转移到当前格只于当前格右边的格子有关。从上一层对应格转移到当前格只于上一层对应的那一格有关。需要注意的是在边界上面的格需要特殊处理,顶层的格(既开始的时候所在那一层)只可以向水平的一个方向和向下转移。而两边的格无法从它的边缘转移到最值,所以最左边的格子的从左边转移过来的最值可以等于从上方转移过来的最值,同理最右边的格子的从右边转移过来的最值可以等于从上方转移过来的最值。(这里定义起点所在那一层是顶层,终点所在那一层是底层)。
上代码:

 1 #include <cstdio>
 2 #include <cstring>
 3 #define max(x,y) (x >= y ? x : y)
 4 #define MAX 102
 5 #define INF (1<<30)
 6 using namespace std;
 7
 8 int c[MAX][MAX];
 9 int dp[MAX][MAX];    /* 0 :left 1:behind 2 : right*/
10 int ldp[MAX][MAX],rdp[MAX][MAX];
11 int n,m;
12
13 void reset(){
14     memset(dp,0,sizeof(dp));
15     for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) dp[i][j] = dp[i][j] = dp[i][j] = -INF;
16 }
17
18 int main()
19 {
20     int t;
21     //freopen("data.txt","r",stdin);
22     scanf("%d",&t);
23     for(int z=1;z<=t;z++){
24         scanf("%d %d",&m,&n);
25         memset(c,0,sizeof(c));
26         reset();
27         memcpy(ldp,dp,sizeof(dp));
28         memcpy(rdp,dp,sizeof(dp));
29         for(int j=1;j<=m;j++) for(int i=1;i<=n;i++) scanf("%d",&c[i][j]);
30         dp[1][1] = dp[1][1] = dp[1][1] = c[1][1];
31         for(int j=1;j<=m;j++) dp[1][j] = dp[1][j-1]+c[1][j];
32         for(int i=2;i<=n;i++){
33             for(int j=1;j<=m;j++){
34                 dp[i][j] = dp[i-1][j] + c[i][j];
35             }
36             ldp[i][1] = dp[i][1];
37             for(int j=2;j<=m;j++){
38                 ldp[i][j] = max(ldp[i][j] , max(dp[i][j] , ldp[i][j-1]+c[i][j]) );
39             }
40             rdp[i][m] = dp[i][m];
41             for(int j=m-1;j>=1;j--){
42                 rdp[i][j] = max(rdp[i][j] , max(dp[i][j] , rdp[i][j+1]+c[i][j]));
43             }
44
45             for(int j=1;j<=m;j++) dp[i][j] = max(dp[i][j] , max(ldp[i][j] , rdp[i][j]));
46         }
47         printf("Case #%d:\n%d\n",z,dp[n][1]);
48     }
49     return 0;
50 }

1004

转载于:https://www.cnblogs.com/sineatos/p/3737481.html

百度之星2014资格赛 1004 - Labyrinth相关推荐

  1. 【百度之星2014~初赛(第二轮)解题报告】JZP Set

    声明 笔者近期意外的发现 笔者的个人站点 http://tiankonguse.com/ 的非常多文章被其他站点转载,可是转载时未声明文章来源或參考自 http://tiankonguse.com/  ...

  2. 百度之星2014-2016资格赛试题及解答

    2016年百度之星资格赛试题 原文链接:http://blog.csdn.net/jklongint/article/details/51415402 另一篇相关链接:http://www.cnblo ...

  3. 百度之星2018资格赛游记

    刷化学物理英语之余,打百度之星以怡情. 但是在做最简单的1002时,以为英语字母有24个,成功RE五次. 花了2小时调试.......

  4. 百度之星 2018 资格赛 T1

    老年人打一下百度之星. A一题就行了- 很明显就是个状压DP- #include <cstring> #include <iostream> #include <cstd ...

  5. 2014年百度之星程序设计大赛 - 资格赛 1004 Labyrinth(Dp)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/sr19930829/article/details/26003869 Labyrinth Time ...

  6. 度度熊与邪恶大魔王 (百度之星之资格赛)

    度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来.  邪恶大魔王的麾下有n个怪兽,每个怪兽有a[i]的生命值,以及b[i]的防御力.  度度熊一共拥有m种攻击方式,第i种攻击方式,需要消耗k[i]的 ...

  7. 百度之星2018资格赛t6三原色图(MST minimum spanning tree)

    ac代码: #include<bits/stdc++.h> #define per(i,a,b) for(int i=a;i<=b;i++) using namespace std; ...

  8. bestCoder 百度之星程序设计资格赛 1005下棋

    下棋 Accepts: 345 Submissions: 2382 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K ...

  9. 百度之星2017资格赛1003 度度熊与邪恶大魔王

    Problem Description 度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来. 邪恶大魔王的麾下有n个怪兽,每个怪兽有a[i]的生命值,以及b[i]的防御力. 度度熊一共拥有m种攻击方式 ...

最新文章

  1. php基础 简书,php基础
  2. 通信系统之信道(二)
  3. android愤怒小鸟游戏、自定义View、掌上餐厅App、OpenGL自定义气泡、抖音电影滤镜效果等源码...
  4. C#实现二叉树--二叉链表结构
  5. 万兆网卡实际吞吐量_案例探索 | 千兆/万兆网卡每秒转发包数处理能力上限到底有多大?...
  6. js如何监听元素事件是否被移除_js 监听事件的叠加和移除 -
  7. leaflet自定标签json_Windows Terminal更新后,自定义配置失效?快捷键无法使用?
  8. 要把AI建在赤道上的华为,为何用全栈全场景方案打响第一枪
  9. BitTorrent协议与MagNet协议原理
  10. spacy存在内存泄露问题
  11. 看了这篇c语言结构体精讲解,你难道还怕你不会吗?
  12. IEnumerable 和 IEnumerator
  13. 冲刺七天----03
  14. Java中的静态方法、类方法、成员方法、构造方法、非静态方法,各方法的定义以及个方法的功能详解大全
  15. java计算机毕业设计大数据在线考试系统在线阅卷系统及大数据统计分析MyBatis+系统+LW文档+源码+调试部署
  16. Cadence Allegro 鼠标轨迹快捷键的设置图文教程及视频演示
  17. 基于英飞凌TLE8242-2L的开关/比例电磁阀驱动电路
  18. 在双曲空间进行细粒度实体分类
  19. python linux上屏幕截图_在Linux上通过Python脚本拍摄屏幕截图
  20. python傻瓜瓜入门

热门文章

  1. MySQL5.7.11免安装版的安装和配置以及解决MYSQL服务无法启动问题
  2. html引入php文件中的函数,在b2core框架和simple_html_dom.php文件里面都有一个load()函数...
  3. 英伟达验证图片加载不出来_让大卫雕塑跳舞、蒙娜丽莎说话,英伟达视频合成有如此多「骚操作」...
  4. 星型模型 3nf的区别_贵州省遵义市工业模型经典案例展示
  5. oracle字符串转in方法,Oracle 逗号分割的字符串转换为可放入in的语句
  6. 18、计算机图形学——BRDF与渲染方程
  7. MFC创建属性页详细步骤与注意事项
  8. html选择器_HTML的id选择器类选择器
  9. flutter识别html标签,Flutter:获取HTML页面的某些元素
  10. 基于spring boot调用接口的工具类