求改
2026-07-26 17:10:10
发布于:浙江
24阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int a[n+5];
int dp[n+5];
for(int i=1;i<=n;i++){
cin>>a[i];
dp[i]=INT_MAX;
}
dp[1]=0;
dp[2]=abs(a[2]-a[1]);
for(int i=3;i<=n;i++){
dp[i]=min(dp[i-1]+abs(a[i]-a[i-1]),dp[i-2]+abs(a[i]-a[i-2]));
}
cout<<dp[n];
}
全部评论 1
哪题
2026-07-26 来自 云南
1https://www.acgo.cn/problemset/discuss/93766?questionCollectionId=12520
2026-07-26 来自 浙江
0#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
vector<int> a(n+5);
vector<long long> dp(n+5,LLONG_MAX);
for(int i=1;i<=n;i++){
cin>>a[i];
}
if(n==1){
cout<<0;
return 0;
}
dp[1]=0;
dp[2]=abs(a[2]-a[1]);
for(int i=3;i<=n;i++){
dp[i]=min(dp[i-1]+abs(a[i]-a[i-1]),dp[i-2]+abs(a[i]-a[i-2]));
}
cout<<dp[n];
return 0;
}两个 int 数组各 1e5 元素看似不大,但竞赛里栈空间极小(通常几十 KB),大数组开在栈上会直接栈溢出崩溃;
同时累加差值总和极大,int 存不下。跳跃累加总消耗会远超 int 上限(约 2e9),必须用 long long 存 dp 数组,否则答案负数、错误。
当 (n=1) 时,代码执行 dp[2]=abs(a[2]-a[1]) 访问 a [2] 越界,直接报错。
2026-07-26 来自 云南
1好了
2026-07-26 来自 云南
1










有帮助,赞一个