请帮助我,我可以做些什么来解决这个问题。这就是我输入的方式:
[["ABCD"],
["ABC", "D"],
["AB", "CD"],
["AB", "C", "D"],
["A", "BCD"],
["A", "BC", "D"],
["A", "B", "CD"],
["A", "B", "C", "D"]]
答案 0 :(得分:1)
您可能必须使用递归回溯算法来找到要达到的最高分数。构造一个函数
int move (int dir, int curx, int cury, int curscore) {
...
}
根据dir更新当前位置,将得分添加到总得分中并以三种可能性递归调用自身:
move (MOVE_LEFT, newx, newy, newscore);
move (MOVE_RIGHT, newx, newy, newscore);
move (MOVE_DOWN, newx, newy, newscore);
此外,您必须确保不会在相同的字段上一直向左/向右移动(即确保每行只更改一次的方向)并且您必须跟踪,你不计算两次这样的分数(也许是通过使用一个额外的参数,它跟踪当前行中已经访问过的内容)。
当您在最后一行调用MOVE_DOWN
时,递归终止。
然后,收集三个move()
调用的返回值,并使用最大的一个作为自己的返回值。这应该会给你正确的结果。
我希望,这有助于你掌握这一挑战;)