题解 AT4523 【Frog 2】

· · 题解

线性DP简单题

其他细节见代码,代码如下:

#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
int dp[200010],h[200010],m,k;
int main(){
    cin>>m>>k;
    memset(dp,2147483647,sizeof(dp));//初始化数组 
    for(int i=1;i<=m;i++) 
    {
        cin>>h[i];
    }
    dp[1]=0;//设置初始情况 
        for(int j=1;j<=m-1;j++)//向前递推 
        {
                for(int x=1;x<=k;x++)//枚举青蛙向前跳的情况 
                {
                    dp[j+x]=min(dp[j+x],dp[j]+abs(h[j]-h[j+x]));//更新答案 
                }
        }
    cout<<dp[m]; 
return 0;
}