这是我参与8月更文挑战的第26天,活动详情查看:8月更文挑战
1974. 使用特殊打字机键入单词的最少时间
思路分析
本题其实只需要注意下到底是选择顺时针和逆时针就可以了,那么对于选择指针移动最小时间代码如下:
int minJian(char a, char b){
if(b - a < 0){
return minJian(b, a);
}
return min(b - a, a + 26 - b);
}
代码比较简单,不过讲道理作为第一题够用了。
1976. 到达目的地的方案数
思路分析
由于答案可能很大,将结果对
$10^9$ + 7取余 后返回。
这句话听着挺吓人的,但其实还是很简单的逻辑,首先,无向图对我们来说并没有太大意义,我们也不需要性价比不高的边。所以我们需要通过狄杰斯特拉算法进行剪枝
(这里感觉介绍狄杰斯特拉算法没必要,如果有人点赞就下篇文章更一下,就是给定起点计算出所有可达点的最短路径)
狄杰斯特拉算法计算过后是有向且不会出现环的,假设有点a,b,c构成环,且a为起点,那么如果c可由ab路径到达,则必不会存在ac路径。(更不会出现ca路径,因为a到a一定为0)
所以在没有环的情况下,可以利用dfs计算到某个点的次数,假设到u,v亮点的次数为dp[u],dp[v],如果有一点p且n = dp[u] + dist(u, p) = dp[v] + dist(v, p)且dp[p]未计算或大于n,则有dp[p] = dp[u] + dp[v] %