题解
2026-06-19 15:30:19
发布于:广东
7阅读
0回复
0点赞
思路比较简单,mi是当前位置最小的起跳点,从mi依次遍历到i-1,状态转移方程为dp[i]=min(dp[i],abs(a[i]-a[j])+dp[j]);
#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,k;cin>>n>>k;
vector<int> a(n+1),dp(n+1);
for(int i=1;i<=n;i++){
cin>>a[i];
dp[i]=1e9;
}
dp[1]=0;
for(int i=2;i<=n;i++){
int mi=max(1,i-k);
for(int j=mi;j<=i-1;j++){
dp[i]=min(dp[i],abs(a[i]-a[j])+dp[j]);
}
}
cout<<dp[n];
return 0;
}
/*
执行用时:1ms
内存消耗:3.38MB
击败了23.78%的用户
击败了83.24%的用户
*/
这里空空如也


有帮助,赞一个