AcWing
  • 首页
  • 课程
  • 题库
  • 更多
    • 竞赛
    • 题解
    • 分享
    • 问答
    • 应用
    • 校园
  • 关闭
    历史记录
    清除记录
    猜你想搜
    AcWing热点
  • App
  • 登录/注册

AcWing 1018. 【算法提高课】最低通行费(线性DP)    原题链接    简单

作者: 作者的头像   incra ,  2022-09-21 18:08:14 ,  所有人可见 ,  阅读 1173


20


<—点个赞吧QwQ

宣传一下算法提高课整理

一个商人穿过一个 $N×N$ 的正方形的网格,去参加一个非常重要的商务活动。

他要从网格的左上角进,右下角出。

每穿越中间 $1$ 个小方格,都要花费 $1$ 个单位时间。

商人必须在 $(2N-1)$ 个单位时间穿越出去。

而在经过中间的每个小方格时,都需要缴纳一定的费用。

这个商人期望在规定时间内用最少费用穿越出去。

请问至少需要多少费用?

注意:不能对角穿越各个小方格(即,只能向上下左右四个方向移动且不能离开网格)。

输入格式

第一行是一个整数,表示正方形的宽度 $N$。

后面 $N$ 行,每行 $N$ 个不大于 $100$ 的正整数,为网格上每个小方格的费用。

输出格式

输出一个整数,表示至少需要的费用。

数据范围

$1 \le N \le 100$

输入样例:

5
1  4  6  8  10
2  5  7  15 17
6  8  9  18 20
10 11 12 19 21
20 23 25 29 33

输出样例:

109

样例解释

样例中,最小值为 $109=1+2+5+7+9+12+19+21+33$。

思路

由于这题必须经过$2n-1$个格子,即只能向右或向下走,所以这题和摘花生思路是一样的。
闫氏$\text{DP}$分析法:
状态表示:$f_{i,j}$

  • 集合:$f_{i,j}$表示从$(1,1)$到$(i,j)$的路径的集合
  • 属性:$\min$

状态计算:

  • 从上面走过来,也就对应着$f_{i-1,j}$
  • 做左边走过来,也就对应着$f_{i,j-1}$
  • 所以最后的状态转移方程就是$f_{i,j}=\min\lbrace f_{i-1,j},f_{i,j-1} \rbrace + a_{i,j}$

答案:

  • 根据定义,答案就是$f_{n,n}$

代码

#include <iostream>
#include <cstring>
using namespace std;
const int N = 110;
int n;
int a[N][N];
int dp[N][N];
int main () {
    cin >> n;
    memset (dp,0x3f,sizeof (dp));
    for (int i = 1;i <= n;i++) {
        for (int j = 1;j <= n;j++) {
            cin >> a[i][j];
        }
    }
    dp[1][1] = a[1][1];
    for (int i = 1;i <= n;i++) {
        for (int j = 1;j <= n;j++) {
            dp[i][j] = min (dp[i][j],min (dp[i-1][j]+a[i][j],dp[i][j-1]+a[i][j]));
        }
    }
    cout << dp[n][n] << endl;
    return 0;
}

8 评论


用户头像
溏心荷包蛋.   2024-05-16 11:07         踩      回复

属性不是min吗

用户头像
incra   2024-05-16 15:52         踩      回复

啊感谢提醒


用户头像
Tiny_Konnyaku   2023-01-12 15:39         踩      回复

2n-1格子写成各自了!

用户头像
incra   2023-01-12 15:51         踩      回复

已修改,谢谢提醒qaq


用户头像
头像越粉_竞赛越狠   2022-12-27 21:21         踩      回复

兄弟你带吗摘错了吧

用户头像
incra   2022-12-28 07:10         踩      回复

啊错了,已重新粘代码


用户头像
方源   2022-11-08 22:18         踩      回复

确定能跑通?

用户头像
incra   2022-11-09 07:12         踩      回复

哦写错了一个字母,已修改


App 内打开
你确定删除吗?
1024
x

© 2018-2025 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息