博客
关于我
数塔取数问题
阅读量:281 次
发布时间:2019-03-01

本文共 1589 字,大约阅读时间需要 5 分钟。

为了解决这个问题,我们需要找到从数塔顶端走到底面的路径,使得经过的数字之和最大。每次只能向下走到下一层的相邻位置。我们可以使用动态规划来解决这个问题。

方法思路

  • 问题分析:我们需要从数塔的顶端开始,每次只能向下移动到下一层的相邻位置,找到经过的数字之和的最大值。这个问题可以通过动态规划来解决,因为每一步的选择会影响后续的选择。

  • 动态规划建模:我们使用一个二维数组 dp,其中 dp[i][j] 表示到达第 i 层第 j 个位置时的最大和。我们从第一层开始,逐层填充这个数组。

  • 初始化:第一层只有一个数字,所以 dp[1][1] 初始化为该数字。

  • 填充动态规划数组:对于每一层 i,我们处理每个位置 j

    • 如果是第一层,只能从上一层的 j=1位置来。
    • 如果是最后一层,只能从上一层的 j=i位置来。
    • 其他位置可以从上一层的 j= j-1 和 j= j位置来,取较大的那个加上当前数字。
  • 结果:最后一层的所有位置中的最大值即为答案。

  • 解决代码

    #include 
    #include
    #include
    using namespace std;int main() { int n, N; scanf("%d", &n); N = n; vector
    > a(N + 1, vector
    (N + 1)); for (i = 1; i <= N; ++i) { vector
    row; while (row.size() < i) { char c; do scanf("%c", &c); while (c == ' '); if (c == '\n') break; row.push_back(c - ' '); } for (j = 1; j <= i; ++j) scanf("%d", &a[i][j]); } vector
    > dp(N + 1, vector
    (N + 1)); dp[1][1] = a[1][1]; for (i = 2; i <= N; ++i) { for (j = 1; j <= i; ++j) { if (j == 1) { dp[i][j] = a[i][j] + dp[i-1][j]; } else if (j == i) { dp[i][j] = a[i][j] + dp[i-1][j]; } else { dp[i][j] = a[i][j] + max(dp[i-1][j-1], dp[i-1][j]); } } } int max_val = 0; for (j = 1; j <= N; ++j) { if (dp[N][j] > max_val) { max_val = dp[N][j]; } } cout << max_val << endl; return 0;}

    代码解释

  • 读取输入:首先读取高度 N,然后读取每一层的数字,存储在二维数组 a 中。
  • 初始化动态规划数组dp[1][1] 初始化为第一层的数字。
  • 填充动态规划数组:从第二层开始,逐层计算每个位置的最大和,根据上一层的结果进行计算。
  • 计算结果:最后一层所有位置的最大值即为答案,打印出来。
  • 这个方法通过动态规划有效地解决了问题,确保了每一步的选择都是最优的,从而保证了最终结果的正确性。

    转载地址:http://xfho.baihongyu.com/

    你可能感兴趣的文章
    Nginx配置代理解决本地html进行ajax请求接口跨域问题
    查看>>
    nginx配置全解
    查看>>
    Nginx配置参数中文说明
    查看>>
    nginx配置域名和ip同时访问、开放多端口
    查看>>
    Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
    查看>>
    Nginx配置如何一键生成
    查看>>
    Nginx配置实例-负载均衡实例:平均访问多台服务器
    查看>>
    Nginx配置文件nginx.conf中文详解(总结)
    查看>>
    Nginx配置负载均衡到后台网关集群
    查看>>
    ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
    查看>>
    NHibernate学习[1]
    查看>>
    NHibernate异常:No persister for的解决办法
    查看>>
    NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
    查看>>
    NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
    查看>>
    NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
    查看>>