【leetcode最短路】818. Race Car
2024-09-07 10:17:50
https://leetcode.com/problems/race-car/description/
1. BFS剪枝 0<=current position<=2*target。为什么2*target有点不太明白
class Solution {
public:
int dp[];
struct Node{
int pos;
int speed;
int step;
Node(int p,int s,int ss){
pos=p;
speed=s;
step=ss;
}
};
int racecar(int target) {
queue<Node> Q;
set<pair<int,int> > vis;
Q.push(Node(,,));
vis.insert({,});
while(!Q.empty()){
Node q=Q.front();
Q.pop();
if(q.pos==target) return q.step;
if(vis.find({q.pos+q.speed,q.speed*})==vis.end()&&q.pos+q.speed>=&&q.pos+q.speed<=*target){
vis.insert({q.pos+q.speed,q.speed*});
Q.push(Node(q.pos+q.speed,q.speed*,q.step+));
}
if(vis.find({q.pos,q.speed>?-:})==vis.end()){
vis.insert({q.pos,q.speed>?-:});
Q.push(Node(q.pos,q.speed>?-:,q.step+));
}
}
return -;
}
};
2. Dijkstra,官方题解,没太看懂
3. DP
class Solution {
public:
int dp[];
int racecar(int target) {
if(dp[target]!=) return dp[target];
int bound;
for(int i=;i<;i++){
if((<<i)-==target) return dp[target]=i;
if((<<i)->target){
bound=i;
break;
}
}
dp[target]=bound++racecar((<<bound)--target);
for(int i=;i<bound-;i++){
dp[target]=min(dp[target],bound-++i++racecar(target-(((<<(bound-))-)-((<<i)-))));
}
return dp[target];
}
};
最新文章
- PHP开发笔记:二维数组根据某一项来进行排序
- 解决虚拟机VMware安装CentOS7.0识别不到网卡
- Linux内核--网络栈实现分析(四)--网络层之IP协议(上)
- C++中的vector
- 第一个android应用程序
- Google Chrome 55 Released – Install on RHEL/CentOS 7/6 and Fedora 25-20
- Cannot start service SPUserCodeV4 on computer
- Linux软件
- FMDB将对象放进数据库[二](使用runtime)
- [置顶] IOS培训资料
- Jenkins中关于一些插件的使用方法
- Java基础——第一个记事本代码与Java注释
- 由于losf引起的pxc启动报错处理
- Nginx入门案例(Mac版)
- DjangoRestFramework实践笔记
- --- Android 设置为A2DP 接收器
- kafka为何需要High Available
- sql查询条件为空的另类写法o( ̄▽ ̄)d
- oracle substr函数
- oozie JAVA Client 编程提交作业
热门文章
- Codeforces Round #316 (Div. 2) D Tree Requests
- webpack 使用总结
- CSS - position属性小结
- Dev-Cpp 5.11 c++编译器下载
- 将find过滤添加到数组
- linux系统产生随机数的6种方法
- 解决 mounting /dev/block/mmcblk0p1 on /sdcard failed
- Python函数的装饰器
- 多线程并发情况下 重复insert问题
- C++中 #ifdef 和#endif的作用