棋盘-做题报告

棋盘

注:我用-1表示没有颜色的格子

这题变态啊。。。一开始没怎么看懂题目就无脑套了DIJKSTRA,然后35分

然后决定用爆搜,然而分数更低了,错的还都是wa。

真的难受,然后就看了波题解,发现做这类题目应该模拟题意去做,比如说:

你可以花费 222 个金币施展魔法让下一个无色格子暂时变为你指定的颜色。
但这个魔法不能连续使用, 而且这个魔法的持续时间很短,也就是说,如果你使用了这个魔法,
走到了这个暂时有颜色的格子上,你就不能继续使用魔法; 
只有当你离开这个位置,走到一个本来就有颜色的格子上的时候,
你才能继续使用这个魔法,而当你离开了这个位置
(施展魔法使得变为有颜色的格子)时,这个格子恢复为无色。

我处理时对这个的意思一知半解,认为只要在dfs内加一个last_color的参数然后要搜索是判断即可,如果last_color==a[sx][sy]==-1时continue;

事实证明,这是错误的,例如有一次我搜到了一个没有颜色的格子,
我把它变成成了有颜色的格子,然后开始搜索。
此时last_color的颜色是变成的那个有颜色的颜色没错,
但下一次比较时如果又有一个没颜色的格子,
此时我的last_color是有颜色的啊啊啊啊,然后又再次花费了两金币改变了颜色
可是题意表示:不能连续使用魔法。。。
所以说我:如果last_color==a[sx][sy]==-1时continue这个情况
显而易见,是永远都不会出现的

那要怎么办?

很简单,题目不是让你变颜色么?那就照着他说的做啊!
当a[sx][sy]==-1时直接把a[sx][sy]=a[x][y]
直接改变颜色然后进行搜索,然后再加一个flag判断
哟没有连续使用魔法即可。记得搜索完的回溯:a[sx][sy]=-1;

在之后就是为了满分做的可行性剪枝了看了题解没办法啊,直接就写了出来。。。大概就是用一个数组dp[100][100]来存当搜到x,y是的最小值,如果下一次搜到时x,y时的值都大于dp[x][y],那就return了,否则就更新dp[x][y]的值。

总结:题目理解透了再做!!!

posted @ 2018-11-07 00:49  加固文明幻景  阅读(1)  评论(0编辑  收藏  举报  来源