求助,为什么记忆化搜索timeout了
查看原帖
求助,为什么记忆化搜索timeout了
768725
jer_chou楼主2024/5/6 21:35
#define _CRT_SECURE_NO_WARNINGS 1
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;

struct e_t {
	int next, to, w;
}e[100000];
int head[20009], tail = 0;
bool vis[100000];
void add(int a, int b,int w)
{
	e[++tail].next = head[a];
	e[tail].to = b;
	e[tail].w = w;
	head[a] = tail;
}


int n, m, s, t;
int memory[20009][2000];
int dfs(int cur_pos, int cur__step)
{
	if (memory[cur_pos][cur__step]) return memory[cur_pos][cur__step];
	if (cur_pos == s) return 0;
	int reval = 0x3F3F3F3F;
	int cost = 0x3F3F3F3F;
	for (int i = head[cur_pos]; i; i = e[i].next) {
		if (!vis[i]) {
			vis[i] = 1;
			if (i & 1)vis[i + 1] = 1;
			else vis[i - 1] = 1;
			cost = dfs(e[i].to, cur__step + 1) + (e[i].w / cur__step);
			if (reval >= cost) {
				reval = cost;
			}
			vis[i] = 0;
			if (i & 1)vis[i + 1] = 0;
			else vis[i - 1] = 0;
		}
		
	}
	//reval += (cost);
	return memory[cur_pos][cur__step] = reval;
}

int main()
{
	scanf("%d%d%d%d", &n, &m, &s, &t);
	for (int i = 0,a,b,c; i < m; i++) {
		scanf("%d%d%d", &a, &b, &c);
		add(a, b, c), add(b, a, c);
	}
	printf("%d", dfs(t, 1));
}
2024/5/6 21:35
加载中...