Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int INF = 1e9;
- int n, Bit;
- int x[28],y[28];
- vector <vector<int>> dp(262153, vector<int>(28,INF));
- int distance(int i, int j){
- return (x[i] - x[j])*(x[i] - x[j]) + (y[i] - y[j])*(y[i] - y[j]);
- }
- int salesman(int bit, int i){
- if(bit == Bit) return distance(i,1);
- if(dp[bit][i] != INF) return dp[bit][i];
- for(int j=1; j<=n; j++){
- if(bit & (1<<(j-1)) ) continue;
- dp[bit][i] = min(dp[bit][i], distance(i,j) + salesman(bit | (1<<(j-1)), j));
- }
- return dp[bit][i];
- }
- int main(){
- scanf("%d",&n);
- for(int i=1; i<=n; i++){
- scanf("%d%d",&x[i],&y[i]);
- }
- Bit = (1<<n) - 1;
- printf("%d",salesman(1,1));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement