BUG:UVA116

1. 最后一列初始化错误(最致命)

UVA116 要求从第一列任意行出发,到达最后一列任意行结束。因此最后一列的 dp[i][m-1] 应该等于 a[i][m-1],表示从该位置到终点的最小和就是它本身。

你的代码:

cpp

复制代码
for (int i=0;i<n-1;i++) dp[i][m-1]=INF;
dp[n-1][m-1]=a[n-1][m-1];

这相当于强制路径必须走到最后一行结束,其他行无法到达终点,所以整个 DP 都是错的。

修正:

cpp

复制代码
for (int i = 0; i < n; i++) dp[i][m-1] = a[i][m-1];

2. 起点选择错误

你直接从 x=0 开始输出路径,并认为起点是第 0 行。但最优路径的起点不一定是第 0 行。应该遍历第一列,找出 dp[i][0] 最小的行;如果有多行最小值相同,选择行号最小的那个(因为题目要求字典序最小)。

修正:

cpp

复制代码
int start = 0;
for (int i = 1; i < n; i++) {
    if (dp[i][0] < dp[start][0]) start = i;
}
// 如果值相等,因为 i 从小到大遍历,自然保留行号小的

3. 路径查找时数组越界

你在查找下一步时:

cpp

复制代码
if (dp[x+i][j+1]+a[x][j]==dp[x][j]) {
    x=get_row(x+i);
    break;
}

这里 x+i 可能为 -1 或 n,直接访问 dp[-1][j+1] 或 dp[n][j+1] 会越界。应该用 get_row(x+i) 计算实际行号。

修正:

cpp

复制代码
int next_row = get_row(x+i);
if (dp[next_row][j+1] + a[x][j] == dp[x][j]) { ... }

4. 字典序最小未处理

题目要求如果有多条最小路径,输出行号序列字典序最小的。你的查找顺序是 i = -1, 0, 1,对应的行号是 (x-1+n)%n, x, (x+1)%n,这不是 按行号从小到大排列的。例如 n=5, x=0,候选行号为 4, 0, 1,实际大小顺序是 0, 1, 4。你应该先对三个候选行号排序,然后按从小到大检查。

修正:

cpp

复制代码
int rows[3] = {get_row(x-1), x, get_row(x+1)};
sort(rows, rows+3);
for (int k = 0; k < 3; k++) {
    int nr = rows[k];
    if (dp[nr][j+1] + a[x][j] == dp[x][j]) {
        x = nr;
        break;
    }
}

5. 最终输出错误

你的输出:

cpp

复制代码
cout<<n<<'\n'<<dp[0][0]<<'\n';

这里 n 是行数,不是最后一列的行号;dp[0][0] 也不是最小和(因为起点可能不是第 0 行)。应该在循环输出完前 m-1 列后,输出最后一列的行号 x+1,然后输出 dp[start][0]。

修正:

cpp

复制代码
// 循环输出前 m-1 列的行号
for (int j = 0; j < m-1; j++) {
    cout << x+1 << ' ';
    // ... 更新 x ...
}
cout << x+1 << '\n';  // 输出最后一列的行号
cout << dp[start][0] << '\n';  // 输出最小和
相关推荐
Henry-SAP1 小时前
Beam大模型开源引爆AI热潮
算法
垆边人似月.1 小时前
日志时间窗口内的最大并发请求数(100分 / 滑动窗口 + 排序)
数据结构·c++·算法
Nil2081 小时前
leetcode 70爬楼梯
算法·leetcode·动态规划
垆边人似月.2 小时前
最长递增子序列的个数(200分 / 动态规划)
算法·动态规划
镜子AI2 小时前
教培机构多模态内容跨模态检索系统:基于CLIP的统一表征与图文混合召回算法
人工智能·python·算法·机器学习
小宋10212 小时前
合成评测集怎么造才不“自嗨”:自动出题、去重、泄漏检测与人工抽检
人工智能·算法·机器学习
蒸蒸yyyyzwd2 小时前
秋招笔记day58
算法·哈希算法
Jasmine_llq2 小时前
《P5663 [CSP-J 2019] 加工零件》
数据结构·算法·bfs·广度优先搜索·分层 bfs /·奇偶分层最短路·奇数最短步数
在所不辞兄3 小时前
分层PINN提升多物理场一致性
人工智能·神经网络·算法·机器学习·工程仿真