求问记忆化搜索如何加
查看原帖
求问记忆化搜索如何加
857626
_RainCappuccino_楼主2023/4/16 14:28
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 105;
int a[MAXN][MAXN], n, m, ans = 1e9, minn = 1e9, mem[MAXN][MAXN];
void dfs(int x, int y, int sum) {
	if (sum >= ans) return;
	if (x == n && y == m) {
		ans = min(ans, sum);
		return;
	}
	if (sum + (n - x + m - y)*minn >= ans) return;
	if (x + 1 <= n)dfs(x + 1, y, sum + a[x + 1][y]);
	if (y + 1 <= m)dfs(x, y + 1, sum + a[x][y + 1]);
}
int main() {
	scanf("%d%d", &n, &m);
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= m; j++) {
			scanf("%d", &a[i][j]);
			minn = min(a[i][j], minn);
		}
	memset( mem, -1, sizeof mem);
	dfs(1, 1, a[1][1]);
	cout << ans;
	return 0;
}

这是求最小路径和的程序

其他剪枝都加了,仍然TLE(?大概吧)

只能想到记忆化了

2023/4/16 14:28
加载中...