本文仅供学习参考使用,谢谢

目录

  • 问题描述:
  • 思路分析:
  • 算法描述:
  • 测试数据:
  • 递推:
  • 递归:

问题描述:

霍格沃茨魔法学校的密室里有一个巨大的棋盘,棋盘有n * n个格子,Alice丢失了魔杖被伏地魔困在右下角的格子里,Bob站在最左上方的格子里,带着Alice的魔杖,他想尽快到达Alice那里。穿过一个格子必须花费m个时间单位,有的格子里放着一些魔法石,每个魔法石可以使时间倒流1个时间单位,格子里魔法石的数量不会超过m。而棋盘被施了"过河卒子"魔法,Bob每次只能向下或向右走,他最少要多久才能走到Alice那里最左上和最右下的格子不计算时间,也没有魔法石。

  • 输入:

第一行n,m,第二行开始是一个n * n的矩阵,表示每个格子里魔法石的数量。

  • 输出:

最短时间

思路分析:

  1. 如果要使bob花费的时间最短 则必须选择能得到魔法石最多的那条路
    即所花费的时间为(n-2+n-1)*m - 所得魔法石数量
  2. 如果要求哪条路上坐能得到的魔法石最多,子问题可以化为 求从左上角到每一个有魔法石的的点中 所能得到的魔法石最多的那条路
  3. 而每个有石头的点最多能得到的魔法石数目为 行数上最接近该点且有魔法石的点r 和 列数上最接近该点且有魔法石的点c, 两者中魔法石较多的那个点 所得到的魔法石数目 加上当前点上的魔法石数目,即为这个点所能得到的最多的魔法石。如果没有 从行数上 或 列数上 距离该点最近的点 那么该点所能得到的魔法石最多为他本身所拥有的魔法石数目
  4. 当所有的有魔法石的点 最多能得到的魔法石 都计算完毕之后,右下角所需要花费的时间 可以带入第一点的公式中。其中所得魔法石的数目为 所有能得到魔法石的点中 得到的魔法石数目最大的那一个点所拥有的魔法石数目

算法描述:

1.每一个点为一个node类型的数据含有行列号和魔法石数目(权值),建立一个node型的二维数组用来储存棋盘上的所有的点 和一个stone_sum[]数组用来储存每个点最多所能得到的魔法石的数目
2.用双重for循环输入每一个点所拥有的魔法石数目,并记录含有魔法石的点

测试数据:

  • 数据1:

8 10
0 0 7 0 0 0 0 0
0 0 0 0 0 5 0 0
0 3 0 0 0 0 0 2
0 0 0 4 0 0 6 0
1 0 0 0 0 0 0 0
0 8 0 0 0 3 0 0
0 0 9 0 2 0 0 3
0 0 0 4 0 0 0 0

  • 测试结果:

105
//130-25=105

递推:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define maxsize 100typedef struct {int x;int y;int w;
}Node;int main(int argc, const char * argv[]) {int n=0,m=0,s=0;scanf("%d%d",&n,&m);Node chessboard[n][n];for (int i=0; i<n; i++)for (int j=0; j<n; j++) {scanf("%d",&s);chessboard[i][j].x=i;chessboard[i][j].y=j;chessboard[i][j].w=s;}for (int i=1; i<n; i++) {for (int j=1; j<n; j++) {chessboard[i][j].w+=chessboard[i-1][j].w>chessboard[i][j-1].w?chessboard[i-1][j].w:chessboard[i][j-1].w;}}//    for (int i=0; i<n; i++){//        for (int j=0; j<n; j++)
//            printf("%2d",chessboard[i][j].w);
//        printf("\n");
//    }printf("%d\n",(2*n-3)*m-chessboard[n-1][n-1].w);return 0;
}

递归:

#include <stdio.h>
#include <stdlib.h>
#define maxsize 100int chessboard[maxsize][maxsize];int b(int i, int j){if (i==0 && j==0) {return 0;} else if (i<0 || j<0) {return -1;} else {return b(i-1, j)>b(i, j-1)?b(i-1, j)+chessboard[i][j]:b(i, j-1)+chessboard[i][j];}
}int main(int argc, const char * argv[]) {int n=0,m=0,s=0;scanf("%d%d",&n,&m);for (int i=0; i<n; i++)for (int j=0; j<n; j++) {scanf("%d",&s);if (s!=0) {chessboard[i][j]=s;} else {chessboard[i][j]=0;}}chessboard[n-1][n-1]=b(n, n);printf("%d\n",(2*n-3)*m-chessboard[n-1][n-1]);return 0;
}

个人笔记:算法讲座3.2——魔法石(棋盘最优路径)相关推荐

  1. 《哈利波特与魔法石》英文版读书笔记:目光实体化

    在我小学的时候,我有幸接触到了哈利波特系列小说.后来陆续陆续读完了全部七本.再后来重新阅读了一遍. 众所周知,阅读英文技术文档是诸位程序员的一个必备技能.我在休闲时间阅读哈利波特的英文原著,正是基于这 ...

  2. 【AHOI2002】哈利●波特与魔法石

    题目背景 AHOI2002 DAY2 T2 题目描述 某天,哈利•波特准备去拯救 Super Swamuel 星球上的生灵.该星球上有七种不同的地形,依次分别是:石子路.森林.草地.山地.雪地.沼泽和 ...

  3. fjnu 1441 哈利.波特与魔法石

    Description 大年初三的那个晚上,小可可去电影院看了<哈利?波特与魔法石>,回到家坐在椅子上不一会儿就睡着了,并且梦见自己成了哈利?波特驰骋在充满了正义与邪恶的宇宙中执著地为了正 ...

  4. 菜鸟学Linux 第044篇笔记 算法和私有CA

    菜鸟学Linux 第044篇笔记 算法和私有CA 证书吊销列表CRL(Certificate Revocation List ) 如何解决私钥丢失 PKI: Public Key Infrastruc ...

  5. Magic Gems魔法石

    Magic Gems(递推+矩阵快速幂优化) 题面 Reziba has many magic gems. Each magic gem can be split into M normal gems ...

  6. 哈里波特与魔法石pdf_哈里·罗伯茨(CSS)CSS框架的命运与失败

    哈里波特与魔法石pdf Harry Roberts helps teams all over the world to build better front ends. Craig spoke to ...

  7. 读书笔记 -- 算法入门

    14天阅读挑战赛 努力是为了不平庸~ 算法学习有些时候是枯燥的,这一次,让我们先人一步,趣学算法!欢迎记录下你的那些努力时刻(算法学习知识点/算法题解/遇到的算法bug/等等),在分享的同时加深对于算 ...

  8. python笔记14介绍几个魔法方法

    python笔记14介绍几个魔法方法 先声明一下 各位大佬,这是我的笔记. 如有错误,恳请指正. 另外,感谢您的观看,谢谢啦! (1).__doc__ 输出对应的函数,类的说明文档 print(pri ...

  9. 问题 G: Heartlessly 的魔法石

    问题 G: Heartlessly 的魔法石 时间限制: 1 Sec 内存限制: 128 MB 题目描述 Heartlessly 有 n 个魔法石,每个魔法石都有对应的魔法值(用正整数 a i 表示) ...

最新文章

  1. httpwatch的timechart 解析
  2. 一文盘点2019年AI领域都发生了什么
  3. html5图片加载不了,webView加载html图片遇到的问题解决
  4. Cannot find System Java Compiler. Ensure that you have installed a JDK (not just a JRE) and configur
  5. JSP知识点笔记-常用技术方法
  6. 防沉迷人脸识别可以扫照片吗_人脸识别的智能门锁到底安不安全?用照片可以打开是真的吗?...
  7. Lock同步锁--线程同步
  8. 手把手教你安装VMware虚拟机
  9. [20131014] 出现错误,显示事务没有回滚
  10. ASP.NET高级配置Web.config和Machine.Config
  11. Python2 倒计时,还不快来掌握 Python3 酷炫的新特性? | 原力计划
  12. 企业选择WMS仓库管理系统免费版是否更好
  13. cdr添加节点快捷键_coreldraw合并快捷键是什么,CDR合并快捷键是什么?
  14. 安卓投屏传输手机声音到电脑最简单的方式
  15. ckplayer,超酷网页播放器,用于集成在网站中的播放器
  16. 网易云催生云计算更多可能性
  17. python 判断大于等于且小于等于_关于if语句:检查python中值是否大于、小于或等于零的更好方法...
  18. 使用jQuery仿制网易云音乐移动端
  19. 崩坏3抽奖模拟html5,崩坏3崩坏周周练5月18日答案大全 夜隐重霞崩坏周周练答案汇总...
  20. 2017年度专业技术人员资格考试时间安排

热门文章

  1. 蓝鲸-6.0.2 部署
  2. java计算机毕业设计校园社团管理平台演示录像2021源码+mysql数据库+lw文档+系统+调试部署
  3. python 读取xlsx文件报错,解决方法 ( xlrd 2.0.1 仅支持 .xls 文件)
  4. jsPlumb.deleteEveryConnection is not a function jsPlumb清除画布 jsPlumb删除所有节点和所有连线
  5. 本地搭建Elasticsearch集群
  6. 遍历HashMap方法
  7. 酒便利“20分钟喝上放心酒”的故事,能打动北交所吗?
  8. Jsoup解析(京东搜索)
  9. 绝地求生:全军出击今日正式服上线,用电脑来玩手游的方法
  10. 损失函数整理(分类和回归)