• 数字三角形升级版(棋盘型动态规划)


    数字三角形升级版

    题目描述:
    从数字三角形的顶部(如图,第一行的5表示行数)到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,且你有一次机会可以把任何一个数重复加一遍。
    和最大的路径称为最佳路径。你的任务就是求出最佳路径上的数字之和。
    输入描述:
    第一行:一个数,表示行数。
    接下来n行为数塔
    输出描述:
    一个数即最优结果
    样例输入:
    5
    1
    1 3
    1 1 3
    1 1 1 3
    7 1 1 1 3
    样例输出:
    18
    数据范围及提示:
    三角形行数不大于1000。最大和不大于maxlongint
    思路:
    加一维表示这条路径上是否已经取数,用0和1表示。

    #include<iostream>
    #include<cstdio>
    using namespace std;
    const int maxn=1010;
    int n,a[maxn][maxn],f[maxn][maxn][2];
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
          for(int j=1;j<=i;j++)
          {
            scanf("%d",&a[i][j]);
            f[i][j][0]=a[i][j];
            f[i][j][1]=a[i][j]<<1;
          }
        for(int i=n-1;i>=1;i--)
          for(int j=1;j<=i;j++)
          {
            f[i][j][0]=a[i][j]+max(f[i+1][j][0],f[i+1][j+1][0]);
            f[i][j][1]=a[i][j]+max(f[i+1][j][1],f[i+1][j+1][1]);
            f[i][j][1]=max(f[i][j][1],f[i][j][0]+a[i][j]);
          }
          printf("%d",f[1][1][1]);
          return 0;
    }
  • 相关阅读:
    Vue 单向数据流&双向数据绑定原理
    Arguments对象
    类数组对象(array-like objects)
    ...theArgs剩余参数
    vue 深度选择器/deep/报错(标红)
    修改mandMobile下拉菜单样式
    PC端input maxlength 失效问题
    el-input 正则限制输入为非负整数
    Mac鼠标左右键都是右键
    Vue双向数据绑定简易实现
  • 原文地址:https://www.cnblogs.com/cax1165/p/6070880.html
Copyright © 2020-2023  润新知