3-4 数字三角形问题

来源:互联网 发布:行知中学老师 编辑:程序博客网 时间:2024/06/05 15:19

要求走法有两种 ,从下或从右下。设阶段m[i][j]为从i行j列到底部的最大和,那么本题的解为m[1][1].

决策为if(m[row+1][col]>m[row+1][col+1])  即取两种走法的较大者。
            m[row][col]+=m[row+1][col];
            else
            m[row][col]+=m[row+1][col+1];

典型的动态规划,从底向上递推。

简单的dp。

#include <iostream>
#include <stdio.h>
#include <stdlib.h>


using namespace std;
int n;
int a[101][101];
int m[101][101];


int main()
{
    freopen("in.txt","r",stdin);
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=i;j++)
        {
            cin>>a[i][j];
            m[i][j]=a[i][j];//初始化m[i][j]为a[i][j]
        }
    }
    for(int row=n-1;row>=1;row--)
    {
        for(int col=1;col<=row;col++)
        {
            if(m[row+1][col]>m[row+1][col+1])
            m[row][col]+=m[row+1][col];
            else
            m[row][col]+=m[row+1][col+1];
        }
    }
    cout<<m[1][1]<<endl;
    return 0;
}

原创粉丝点击