#include #include #include #include #include using namespace std; typedef pair kamen; int N; vector rybnik; vector< vector > memo; long long square_dist(int a, int b) { // čtverec vzdálenosti mezi kameny a, b long long dx = rybnik[a].first - rybnik[b].first; long long dy = rybnik[a].second - rybnik[b].second; return dx*dx + dy*dy; } int otazka(int a, int b) { // Pokud jsme už tuto otázku někdy dostali, rovnou vrátíme odpověď. if (memo[a][b] != INT_MIN) return memo[a][b]; // Inicializujeme odpověď: jsme-li právě v cíli, je to 0 (můžeme zde skončit), // jinak -nekonečno. int odpoved = (b==N-1 ? 0 : -47); // Vyzkoušíme všechny možnosti, kam skočit déle, a vybereme nejlepší. for (int c=0; c> N; for (int n=0; n> x >> y; rybnik.push_back( {x,y} ); } // Inicializujeme paměť. memo.resize( N, vector(N,INT_MIN) ); // Vyzkoušíme všechny možnosti pro první skok a vybereme nejlepší z nich. int odpoved = 0; for (int b=1; b