576. 出界的路径数
采用剪枝和记忆搜索的方法。
当加上dir之后的坐标值,越界时,说明找到了出路,此时return 1;
当没有移动步数的时候,直接return 0;
当当前的坐标值加/减移动步数却不能越界时,return 0;
当当前位置有记忆时,直接return 记忆值。【设置记忆数组初始值为-1】
之后:
int sum = 0;
for(int[] di : dir) {
int ni = i + di[0], nj = j + di[1];
sum = (sum + dsf(m, n, maxMove - 1, ni, nj, ans)) % mod;【注意sum + ,以及求余】
}
ans[i][j][maxMove] = sum;//记录
return sum;
1575. 统计所有可行路径
采用动态规划。
dp[n][fuel + 1],n表示【当前】的位置,fuel表示当前剩余油量。
初始化
for(int i = 0; i <= fuel; i++) {
ans[finish][i] = 1; //起点和重点重合,无论是否有油,都有一条路
}
for(int cur = 0; cur <= fuel; cur++) {//在这个油量的情况下,各个位置都求
for(int i = 0; i < n; i++) { //任意两个点
for(int j = 0; j < n; j++) {
if(i != j) {
int need = Math.abs(locations[i] - locations[j]);
if(cur >= need) {
ans[i][cur] += ans[j][cur- need];
ans[i][cur] %= mod;
}
}
}
}
}
return ans[start][fuel];
1289. 下降路径最小和 II
重点是,再设置一层循环,求出上一层的最小值。
931. 下降路径最小和
从上层到下层,判断一下,左上和右上越界否即可。
标签:return,cur,di,int,每日,一结,ans,sum From: https://www.cnblogs.com/xtag/p/16769894.html