2 条题解

  • 0
    @ 2026-7-20 1:42:37

    P1216 [IOI 1994 / USACO1.5] 数字三角形 Number Triangles——题解

    解题思路

    f[i][j] 表示到达第 ii 行第 jj 个数时的最大路径和。它只能由上一行第 j1j-1 个或第 jj 个位置到达,因此取两者较大值再加当前数字。答案为最后一行的最大值。

    复杂度分析

    时间复杂度和空间复杂度均为 O(r2)O(r^2);可滚动优化到 O(r)O(r) 空间。

    C++17 参考代码

    #include <bits/stdc++.h>
    using namespace std;
    int f[1005][1005];
    int main(){
        ios::sync_with_stdio(false);cin.tie(nullptr);
        int r;cin>>r;
        for(int i=1;i<=r;i++)for(int j=1;j<=i;j++){int x;cin>>x;f[i][j]=max(f[i-1][j-1],f[i-1][j])+x;}
        cout<<*max_element(f[r]+1,f[r]+r+1)<<'\n';return 0;
    }
    
    • 0
      @ 2026-7-20 1:42:37

      #include <bits/stdc++.h> using namespace std; int f[1005][1005]; int main(){ ios::sync_with_stdio(false);cin.tie(nullptr); int r;cin>>r; for(int i=1;i<=r;i++)for(int j=1;j<=i;j++){int x;cin>>x;f[i][j]=max(f[i-1][j-1],f[i-1][j])+x;} cout<<*max_element(f[r]+1,f[r]+r+1)<<'\n';return 0; }

      • 1

      [IOI 1994 / USACO1.5] 数字三角形 Number Triangles

      信息

      ID
      4926
      时间
      4000ms
      内存
      256MiB
      难度
      10
      标签
      递交数
      1
      已通过
      1
      上传者