L3956棋盘
1,记得之前要复习。上次先写的题是数的划分。
虽然我不想说,估计全忘了。复习就当把上次的题写了把。
应该比较稳了。
2,题中的要求。
一,所在的位置必须是有颜色的。(很明显要用bool去涂一遍)
二,方向可以是上下左右四个方向。(肯定要打表不是,记得之前打表打了好几个有表的题)
三,走格子时候,若颜色相同则不需要花费金币,若颜色不同则需要花费1枚金币。(每次特判下如果bool没有标记,先看有钱没,有钱就可以走)
四,走格子的时候,可以施展魔法使得下一个无色的格子变成你指定的颜色,但是在你离开你变得颜色这个格子之前同时得走到一个本来就有颜色的格子,
不能再使用这个魔法。另外在你离开之后,这个变了颜色的格子会恢复到原先的颜色。
(那么就得再开一个魔法的数组,开了魔法我就bool一下,同时要再标记一个无色的。
但是在递归进入的话,怎么个回溯,反正又不能回头就相当于回溯了)
(关于这个使用魔法这个东西,思维难度好像在这里吧,
我的解决方法是,在你使用这个魔法时,判定一下你上步使用魔法了没,只要上步没有用过魔法,不管你走过几个(必然走过一个以上了),那么我这次肯定是可以使用魔法的
先特判上步用过魔法没,
再给两个可以选颜色的特判。
)
五,看数据范围,写出最基本的问题。
六,再就是一些小细节问题,但是我突然对这个
if(xi==m)~~~,这个里面用return 有点疑惑。
3,题目中的问题。
一,memset函数的用法。
二,搜索函数的设计。
搜索目标,和搜索状态。从(1,1)走到(m,m)所需要的最小金币数,
状态设计,m表示当前用了多少金币,xi,表示当前要走的x坐标,yi,表示当前要走的y坐标。
三,关于这种走坐标的,好像图里面挺多这个的》?
嗯,这个打表方法还是懂了一点。
四,我现在想到一个边界性的问题,如果到不了我该怎么判断?
五,不对我,我感觉我整个这个设计的,有点不。
对于if(xi=m)~~~这块有点问题。
六,还是运行不了你决定可能哪里有问题。
①,测试陷入了死循环肯定是不对的。首先在第一步就卡住了,不停地显示1.。
②,我来测试一下输入。
③,走出了棋盘怎么办》所以先判断都大于1的情况下,再加一句要都同时小于等于m;
④,先不考虑到不了的情况。
⑤,还是再测试点1不停的循环,这可能是什么原因?直接就卡到这步上去了。
⑥,最后感觉还是使用魔法这块错了,if不该用这这块。
⑦,还是不行。。好像是之前用坐标的思想来匹配不成功。打表移动这块出现了问题。
样例是x行,y列。
⑧,但是还是没进去循环。。
⑨,第一解决方法是,把判断x,y在界限内和移动换一下位置。这个无所谓。
第二,在传入的时候,都再设了一个新的变量
七,看网校题解
①,人家先多考虑的是优化剪枝什么的
②,还没有代码,这我该咋办。。
③,向优秀的人去学习。
④,不过我大致感觉了下dfs和bfs。。可能好像就是在打表那块有挺多的不同把
八,看别人的题解
①,对于颜色的改变,更适合自己的使用,比如无色变成了0,就更好判断一些。
②,总结一下,就是优化很好。。但是我决定这样我学不了什么东西的。
③,我注释掉了一点我觉得不懂的优化代码,然后。。。样例一个都没过,一摸一样的代码。。
④,那我可能知道我的错误在哪里了,我可能缺的是优化。。
九,如何改进我的代码。
①,我他妈加一个优化的东西,就成。。终于不他妈循环了哈哈哈,虽然还他妈答案是错的。。
②,你觉得现在的问题在哪呢?
③,对于这个颜色的分枝根据之前的进行一下优化,
其实这里给我们了一个启示,尽量把条件变化成if else类型的
再往下分也无所谓。
这个时候往往你要去提取题目中的条件了
④,有数字了,但是答案不对。
⑤,问题挺大的。
⑥,最开始board【】都错了。
⑦,再有一个问题在于,对于使用魔法,你变颜色这步。。。
你既然是求最小的,那么你直接附上一个的颜色呗。。。少花钱啊。。
⑧,这个。。就是搜索都能过一大半了。。但是还是有问题。
⑨,显然这个是i等待你啥时候再搞呢。