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