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;
}

浙公网安备 33010602011771号