https://leetcode.com/problems/race-car/description/
1. BFS剪枝 0<=current position<=2*target。为什么2*target有点不太明白
1 class Solution { 2 public: 3 int dp[10002]; 4 struct Node{ 5 int pos; 6 int speed; 7 int step; 8 Node(int p,int s,int ss){ 9 pos=p; 10 speed=s; 11 step=ss; 12 } 13 }; 14 int racecar(int target) { 15 queue<Node> Q; 16 set<pair<int,int> > vis; 17 Q.push(Node(0,1,0)); 18 vis.insert({0,1}); 19 while(!Q.empty()){ 20 Node q=Q.front(); 21 Q.pop(); 22 if(q.pos==target) return q.step; 23 if(vis.find({q.pos+q.speed,q.speed*2})==vis.end()&&q.pos+q.speed>=0&&q.pos+q.speed<=2*target){ 24 vis.insert({q.pos+q.speed,q.speed*2}); 25 Q.push(Node(q.pos+q.speed,q.speed*2,q.step+1)); 26 } 27 if(vis.find({q.pos,q.speed>0?-1:1})==vis.end()){ 28 vis.insert({q.pos,q.speed>0?-1:1}); 29 Q.push(Node(q.pos,q.speed>0?-1:1,q.step+1)); 30 } 31 } 32 return -1; 33 } 34 };