Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef pair<int, int> pii;
- const int K = 10;
- pii pos[K + 1];
- int dp[K + 1][1 << (K + 1)];
- int row, col, nPoint;
- int distPoint(int i, int j){
- return abs(pos[i].first - pos[j].first) + abs(pos[i].second - pos[j].second);
- }
- int dpTopDown(int u, int bitMask){
- if(bitMask == (1 << (nPoint + 1)) - 1){
- return distPoint(u, 0);
- }
- if(dp[u][bitMask] != 0){
- return dp[u][bitMask];
- }
- int mn = 1e9;
- for(int v = 0; v <= nPoint; ++v){
- if(v != u && (bitMask & (1 << v)) == 0){
- mn = min(mn, distPoint(u, v) + dpTopDown(v, (bitMask | (1 << v))));
- }
- }
- return dp[u][bitMask] = mn;
- }
- int main(){
- scanf("%d %d %d %d %d", &row, &col, &pos[0].first, &pos[0].second, &nPoint);
- for(int i = 1; i <= nPoint; ++i){
- scanf("%d %d", &pos[i].first, &pos[i].second);
- }
- cout << dpTopDown(0, 1);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement