AtCoder DP Contest(刷题记录)

A -Frog1

题意:

给定\(n\)个石头,第\(i\)个石头的高度为\(h_i\).现在要求小青蛙从\(1\)号石头跳到\(n\)号石头,每次小青蛙可以选择从\(i\)号石头跳到\(i+1\)\(i+2\)号石头,代价是起跳点与落点的高度差的绝对值。询问你最小代价。

解法:

\(dp[i]\)表示小青蛙跳到第 号石头时的最小代价。

转移方程:\(dp[i]\)=\(min(dp[i-1]+abs(h[i]-h[i-1]),dp[i-2]+abs(h[i]-h[i-2]))\)

代码:

int main()
{
    int n;cin>>n;
    vector<int>a(n),dp(n,0);
    for(int i=0;i<n;i++)cin>>a[i];
    dp[0]=0;
    for(int i=1;i<n;i++)
    {
        if(i>=2)
        {
            dp[i]=min(dp[i-1]+abs(a[i]-a[i-1]),dp[i-2]+abs(a[i]-a[i-2]));
        }
        else dp[i]=dp[i-1]+abs(a[i]-a[i-1]);
    }
    cout<<dp[n-1]<<endl;
    return 0;
}
posted @ 2024-12-28 15:45  书面  阅读(59)  评论(0)    收藏  举报