zoukankan      html  css  js  c++  java
  • b_lq_数字三角形(注意读入数据和题目描述的差异)


    给出n(n<=100)层的数字三角形,每次只能往左下/右下走,求 abs(往左走次数-往右走次数)≤1 的最大权值路径和。

    5
    7 
    3 8 
    8 1 0 
    2 7 4 4
    4 5 2 6 5
    输出:27
    

    思路
    三角形和输入数据的形状不一样,所以往左下走变成了输入数据的往下走
    而往下走的前提是上面有格子,所以往下走的状态转移前要加个判断 if (j<i)

    比的时候我发现到达终点的路径总和有比27大的..,但不要忘了看图,起点是整个三角形的顶点,所以要满足左下和右下的次数不大于1的话,终点只能在底部的中间位置(n为偶数时,答案为max(f[n/2-1], f[n/2]);n为奇数时,答案为 f[n/2])

    #include<bits/stdc++.h>
    using namespace std;
    const int N=105;
    int n,g[N][N],f[N][N];
    int main() {
        std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
        cin>>n;
        for (int i=1; i<=n; i++)
        for (int j=1; j<=i; j++)
            cin>>g[i][j];
        for (int i=1; i<=n; i++)
        for (int j=1; j<=i; j++) {
            if (j<i) f[i][j]=max(f[i][j], f[i-1][j]+g[i][j]); //每行的最后一列的状态不能从上一行往下走转移过来
            f[i][j]=max(f[i][j], f[i-1][j-1]+g[i][j]);         
        }
        if (n&1) cout<<f[n][n/2+1];
        else     cout<<max(f[n][n/2], f[n][n/2+1]);
        return 0;
    }
    
  • 相关阅读:
    MySQL官方文档-二级索引覆盖主键索引
    windows server 2008/win7 远程控制
    博客园美化日记
    MarkDown 中使用 LaTeX 数学式
    DOS命令和bat脚本
    数据链路层
    网络安全
    运输层安全协议SSL
    DNS/域名
    停止等待协议
  • 原文地址:https://www.cnblogs.com/wdt1/p/13833926.html
Copyright © 2011-2022 走看看