P1433 吃奶酪(搜索DFS+记忆化)

时间:2022-02-07 12:21:11

emmmmm,我还是看了题解的。。。。尴尬,其实不用记忆化搜索也是可以的。因为我不用也是最后一个点超时。但是我是用的贪心+DFS。。。超时的原因是贪心。。。。mmp,本来加贪心就是为了不超时。。。。

思路:

  搜索树的构建:就是把这一层的点把所有未访问的点当成孩子,这就构成了搜索树!

  记忆化: 就是把每个点的计算只是算一次,用个大表格记起来。。。尴尬

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
using namespace std;
double ans = ;
double now;
int n;
bool vis[];
double x[], y[];
double f[][]; void dfs(int k, int d){
if (now >= ans)return;
if (k == n){ ans = min(ans, now); return; }
for (int i = ; i <= n;++i)
if (!vis[i]){
if (f[d][i]!=){
vis[i] = ;
now += f[d][i]; dfs(k + , i); now -= f[d][i];
vis[i] = ;
}
else{
vis[i] = ;
f[i][d] = f[d][i] = sqrt((x[i] - x[d])*(x[i] - x[d]) + (y[i] - y[d])*(y[i] - y[d]));
now += f[i][d]; dfs(k + , i); now -= f[i][d];
vis[i] = ;
}
}
} int main(){
cin >> n;
for (int i = ; i <= n; ++i)cin >> x[i] >> y[i];
vis[] = ;
dfs(, );
printf("%.2lf\n", ans);
return ;
}