lintcode 1686. 雪地靴

本文探讨了一种算法,旨在解决在不同积雪深度的砖块上行走时,如何最少次数地更换靴子的问题。考虑到靴子的积雪承受能力和步长限制,该算法通过动态规划寻找最优路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

n块砖,第i块砖积雪f[i]英尺。b双靴子,编号从0b-1,第i双靴子能在至多s[i]英尺深的积雪行走,步长最多为d[i]。每次可以选择不换靴子继续走,或者丢弃当前的靴子换上当前编号最小的靴子,或者丢弃当前编号最小的靴子,求走到最后一块砖最小丢弃的靴子数。

样例

给定 n=10b=4f=[0,2,8,3,6,7,5,1,4,0]s=[2,4,3,7]d=[3,2,4,1], 返回 2

穿编号为0的靴子,到达编号为1的砖块。
丢弃编号为0的靴子,穿编号为1的靴子,到达编号为3的砖块。
丢弃编号为1的靴子,穿编号为2的靴子,达到编号为7的砖块。
不换靴子到达编号为9的砖块。
总共丢弃了两双靴子。

注意事项

  • f[0] = f[n - 1] = 0f[0]=f[n−1]=0
  • 2 \leq n, b \leq 2502≤n,b≤250
  • 0 \leq f[i], s[i] \leq 10^90≤f[i],s[i]≤10​9​​
  • 1 \leq d[i] \leq n - 11≤d[i]≤n−1

 

某一个点i最小值,等于前面的一些点j来走到,限制条件不要漏写!!!!!(i-j<=d[k]&&f[i]<=s[k]&&f[j]<=s[k])

public int getMinimumNumOfBoots(int n, int b, int[] f, int[] s, int[] d) {
	        int dp[]=new int[n];
	        dp[0]=0;//下标为0,也代表换了0双鞋
	        for(int i=1;i<n;i++){//d[i]=dp[i-k]  dp[i-k]+1
	            dp[i]=n+99999;
	            for(int j=0;j<i;j++){
	                for(int k=dp[j];k<b;k++){
	                	if(k>=dp[i]) break;
	                    if(i-j<=d[k]&&f[i]<=s[k]&&f[j]<=s[k]){//f[j]<=s[k]!!!
	                        dp[i]=Math.min(dp[i],k);
	                        break;
	                    }
	                }
	            }
	        }
	        return dp[n-1];
	    }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值