hdu 3681 bfs 二分 狀壓dp判斷

2021-09-06 11:51:33 字數 1156 閱讀 4334

思路:機械人從出發點出發要求走過所有的y,因為點很少,所以就能想到經典的tsp問題。首先bfs預處理出『y',』f','g'之間的最短距離,由於g點可以充電,到達g點就把當前能量更新為電池容量然後繼續走。因為每個g點只能充一次電,這就好像tsp中的每個點只能走一次一樣,然後就是二分答案了,用狀壓dp判定當前電池容量的情況下是否能符合條件。

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;78

struct

nodenode[17*17

];11

12int dist[17][17][17][17

];13

int dp[1

<<17][17

];14

intn,m,state,final_state,start;

15char map[17][17

];16

int dir[4][2]=,,,};

1718

void bfs(node &node)

1933}34

}35}36

}373839

bool judge(int

power)

4056}57

}58return res>=0;59

}606162

intmain()

63else

if(map[i][j]=='g'

)else

if(map[i][j]=='y'

)84}85

}86 memset(dist,-1,sizeof

(dist));

87for(int i=0;i)

90 low=0,high=300,ans=-1;91

while(low<=high)else

97 low=mid+1;98

}99 printf("

%d\n

",ans);

100}

101return0;

102}

103104

105106

107

view code

HDU 3681 bfs 狀壓dp 二分

題目 click 題意 給定乙個n m的地圖,d表示不能走的地方,g補充滿能量,問從f點走完所有的y點最小的能量,走乙個消耗一格能量。注意一下題目中所給的範圍,y g的數量不超過15。在無數條路徑中找出一條最佳路徑,d是不能走的,所需點的數量頂多16個 加上了f點 其實可以發現本質就是乙個tsp的變...

hdu 3681 bfs 二分 狀壓dp判斷

思路 機械人從出發點出發要求走過所有的y,因為點很少,所以就能想到經典的tsp問題。首先bfs預處理出 y f g 之間的最短距離,由於g點可以充電,到達g點就把當前能量更新為電池容量然後繼續走。因為每個g點只能充一次電,這就好像tsp中的每個點只能走一次一樣,然後就是二分答案了,用狀壓dp判定當前...

qwb與李主席 狀壓 二分

description qwb和李主席打算平分一堆寶藏,他們想確保分配公平,可惜他們都太懶了,你能幫助他們嘛?input 輸入包含多組測試資料,處理到檔案結束。每組測試資料的第一行是乙個正整數n 0 n 36 表示物品的總個數.接下來輸入n個浮點數 最多精確到分 表示每個物品的價值v 0 v 1e9...