当前位置:网站首页>1340. 跳跃游戏 V-动态规划加dfs
1340. 跳跃游戏 V-动态规划加dfs
2022-06-09 09:28:00 【Mr Gao】
1340. 跳跃游戏 V
给你一个整数数组 arr 和一个整数 d 。每一步你可以从下标 i 跳到:
i + x ,其中 i + x < arr.length 且 0 < x <= d 。
i - x ,其中 i - x >= 0 且 0 < x <= d 。
除此以外,你从下标 i 跳到下标 j 需要满足:arr[i] > arr[j] 且 arr[i] > arr[k] ,其中下标 k 是所有 i 到 j 之间的数字(更正式的,min(i, j) < k < max(i, j))。
你可以选择数组的任意下标开始跳跃。请你返回你 最多 可以访问多少个下标。
请注意,任何时刻你都不能跳到数组的外面。
示例 1:
输入:arr = [6,4,14,6,8,13,9,7,10,6,12], d = 2
输出:4
解释:你可以从下标 10 出发,然后如上图依次经过 10 --> 8 --> 6 --> 7 。
注意,如果你从下标 6 开始,你只能跳到下标 7 处。你不能跳到下标 5 处因为 13 > 9 。你也不能跳到下标 4 处,因为下标 5 在下标 4 和 6 之间且 13 > 9 。
类似的,你不能从下标 3 处跳到下标 2 或者下标 1 处。
示例 2:
输入:arr = [3,3,3,3,3], d = 3
输出:1
解释:你可以从任意下标处开始且你永远无法跳到任何其他坐标。
示例 3:
输入:arr = [7,6,5,4,3,2,1], d = 1
输出:7
解释:从下标 0 处开始,你可以按照数值从大到小,访问所有的下标。
示例 4:
输入:arr = [7,1,7,1,7,1], d = 2
输出:2
示例 5:
输入:arr = [66], d = 1
输出:1
解题代码如下:
void dfs(int* arr,int arrSize,int d,int index,int num,int *max,int* dp,int* r){
int i;
if(*max<num){
*max=num;
}
for(i=1;i<=d;i++){
if(index+i<arrSize){
if(arr[index+i]<arr[index]){
if(r[index+i]==1){
int numz=num+dp[index+i];
if(*max<numz){
*max=numz;
}
}
else{
dfs(arr,arrSize,d,index+i,num+1,max,dp,r);
int *max1=(int *)malloc(sizeof(int));
*max1=0;
dfs(arr,arrSize,d,index+i,0,max1,dp,r);
dp[index+i]=*max1+1;
r[index+i]=1;
}
}
else{
break;
}
}
}
for(i=1;i<=d;i++){
if(index-i>=0){
if(arr[index-i]<arr[index]){
if(r[index-i]==1){
int numt=num+dp[index-i];
if(*max<numt){
*max=numt;
}
}
else{
dfs(arr,arrSize,d,index-i,num+1,max,dp,r);
int *max2=(int *)malloc(sizeof(int));
*max2=0;
dfs(arr,arrSize,d,index+i,0,max2,dp,r);
dp[index-i]=*max2+1;
r[index-i]=1;
}
}
else{
break;
}
}
}
}
int maxJumps(int* arr, int arrSize, int d){
int i;
int *max=(int *)malloc(sizeof(int));
int *dp=(int *)malloc(sizeof(int)*arrSize);
int *r=(int *)malloc(sizeof(int)*arrSize);
int zmax=0;
for(i=0;i<arrSize;i++){
r[i]=0;
}
for(i=0;i<arrSize;i++){
*max=0;
dfs(arr,arrSize,d,i,0,max,dp,r);
r[i]=1;
dp[i]=*max+1;
printf("%d ",dp[i]);
if(zmax<dp[i]){
zmax=dp[i];
}
}
return zmax;
}
边栏推荐
- Moral and regulatory knowledge of data science
- 【genius_platform软件平台开发】第三十六讲:内置数据类型的最大值宏定义
- 机器学习笔记 - U-Net论文解读
- 【genius_platform软件平台开发】第三十五讲:UDP进行跨网段广播
- 基于云的 LDAP 入门(上)
- 【图机器学习】启发式链路预测方法
- TS 泛型类和泛型接口的好处
- 【科技、商业和管理】看剧学创业:《硅谷》第五季第7-8集
- MSF SSH protocol based information collection
- [linear algebra] understand eigenvalues and eigenvectors
猜你喜欢
![[practical skills] from the book](/img/f5/b3480e0b9c39e729e8167e48bf255d.png)
[practical skills] from the book "beautiful teams"

机器学习笔记 - R语言学习入门系列一

- Bean method ‘redisConnectionFactory‘ in ‘JedisConnectionConfiguration‘ not loaded because @Conditi

Sword finger offer09-- implement queue with two stacks

MSF基于SSH协议的信息收集

Openstack explanation (12) -- glance installation and Preliminary Configuration

openstack详解(十七)——openstack Nova其他配置
![[5机器学习]全网最易懂的决策树(附源码)](/img/cb/815850c5c6ed2b3c20c8ba34caa7d8.png)
[5机器学习]全网最易懂的决策树(附源码)

webservice服务调用

Openstack explanation (XI) -- openstack grace service theoretical knowledge
随机推荐
There is no network for the computer web browser, but QQ and wechat can log in to solve the browser network problem
SSM details
Moral and regulatory knowledge of data science
从零开始实现递归神经网络——【torch学习笔记】
LeetCode_单调栈_中等_739. 每日温度
Visual slam Summary - superpoint / superglue
【科技、商业和管理】看剧学创业:《硅谷》第六季第3-5集
Extensions attribute of TS generics
【图机器学习】图神经网络入门(一)谱图理论
screen越看越好看
redis info命令 memory内存信息说明
LeetCode_模拟_中等_621. 任务调度器
LeetCode_排序_中等_406. 根据身高重建队列
机器学习笔记 - R语言学习入门系列一
Troubleshooting of soaring memory utilization of redis cluster instances
剑指offer09--用两个栈实现队列
基于云的 LDAP 如何解救传统 LDAP?
【新手上路常见问答】关于物联网设计
WebService service call
Changan chain chainmaker multi machine environment