适合仅想要AC,或跟讨论里一样的WA的人
2026-08-10 20:49:10
发布于:浙江
38阅读
0回复
0点赞
我看了一圈都没发现讲讨论里的问题的
——防偷窥
讨论里的问题主要是有三个测试点红了,这是一个蒟蒻常犯的错误我也犯了
亲测是由于不开long long见祖宗,特别鸣谢AC助手~~
#include <bits/stdc++.h>
#define int long long //也可以把这里去掉然后把int 都改成long long.
using namespace std;
int a[100010]={};
int dp[100010]={};
signed main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
dp[1]=0;
dp[2]=abs(a[1]-a[2]);
for(int i=3;i<=n;i++){
dp[i]=min(dp[i-1]+abs(a[i-1]-a[i]),dp[i-2]+abs(a[i-2]-a[i]));
}
cout<<dp[n];
return 0;
}
数组定义,输入啥的我就不讲了。
重点讲第一个for之后的。dp[i]=min(dp[i-1]+abs(a[i-1]-a[i]),dp[i-2]+abs(a[i-2]-a[i]));
首先一眼看出状态转移方程:dp[i]=min(dp[i-1]+abs(a[i-1]-a[i]),dp[i-2]+abs(a[i-2]-a[i])).
而由于dp[1]、[2]都是在手写的范围之内,所以就直接写掉了。
循环从3开始,每次计算,最后输出dp[n]就行。
本帖不是AI,作者原创,点个赞吧!





全部评论 6
顶顶顶
6天前 来自 浙江
0顶顶顶
6天前 来自 浙江
0顶顶顶
6天前 来自 浙江
0顶顶顶
1周前 来自 浙江
0顶顶顶
1周前 来自 浙江
0顶顶顶顶顶顶顶顶顶
1周前 来自 浙江
0







有帮助,赞一个