求助,infoj过了,洛谷上WA on2,是因为没有spj吗
# include <bits/stdc++.h>
using namespace std;
typedef pair<long double, long double> pdd;
# define fi first
# define se second
const int MAXN = 1005;
int n, mx;
pdd a[MAXN], b[MAXN];
long double fl[MAXN][MAXN], fr[MAXN][MAXN];
bool pl[MAXN][MAXN], pr[MAXN][MAXN];
long double ds(int u, int v){
return sqrt((b[u].fi - b[v].fi) * (b[u].fi - b[v].fi) + (b[u].se - b[v].se) * (b[u].se - b[v].se));
}
void prtl(int l, int r);
void prtr(int l, int r);
void prtl(int l, int r){
cout << (l + mx - 1 - 1) % n + 1 << ' ';
if (l == r) return;
if (pl[l][r]) prtl(l + 1, r);
else prtr(l + 1, r);
}
void prtr(int l, int r){
cout << (r + mx - 1 - 1) % n + 1 << ' ';
if (l == r) return;
if (pr[l][r]) prtl(l, r - 1);
else prtr(l, r - 1);
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cerr << fixed << setprecision(11);
cout << fixed << setprecision(11);
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i].fi >> a[i].se;
mx = 1;
for (int i = 1; i <= n; i++){
if (a[i].se > a[mx].se + 1e-10) mx = i;
}
int bsz = 0;
b[++bsz] = a[mx];
for (int i = mx + 1; i != mx; i = i % n + 1) b[++bsz] = a[i];
// for (int i = 1; i <= bsz; i++) cerr << b[i].fi << ' ' << b[i].se << '\n';
// cerr << "ds " << ds(1, 2) << '\n';
for (int l = n; l >= 1; l--){
fl[l][l] = fr[l][l] = 0;
for (int r = l + 1; r <= n; r++){
fl[l][r] = min(fl[l + 1][r] + ds(l, l + 1), fr[l + 1][r] + ds(l, r));
pl[l][r] = fl[l + 1][r] + ds(l, l + 1) < fr[l + 1][r] + ds(l, r);
fr[l][r] = min(fl[l][r - 1] + ds(r, l), fr[l][r - 1] + ds(r, r - 1));
pr[l][r] = fl[l][r - 1] + ds(r, l) < fr[l][r - 1] + ds(r, r - 1);
// cerr << "f " << l << ' ' << r << ' ' << fl[l][r] << '\n';
}
}
// cerr << "f " << fl[1][n] << '\n';
prtl(1, n);
cout << '\n';
return 0;
}