全部评论 1

  • 哪题

    2026-07-26 来自 云南

    1
    • https://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

热门讨论