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 };
View Code

相关文章: