NYOJ-18 The Triangle

来源:互联网 发布:js setdata 编辑:程序博客网 时间:2024/05/17 01:16

source link

1.tips

求下三角矩阵的最大路径和。利用动态规划思想。dp[i][j]表示以点[i,j]结尾的最大路径和,最有子结构为:
dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+a[i][j], a[i][j]表示当前点的值。在矩阵的每行的开始和结束点做特殊处理就行了。

2.code

#include <iostream>using namespace std;int main(){    int n;    int a[110][110];    int dp[110][110];    cin>>n;    for(int i=0;i<n;i++)    {        for(int j=0;j<=i;j++){            cin>>a[i][j];        }    }    dp[0][0]=a[0][0];    for(int i=1;i<n;i++)    {        for(int j=0;j<=i;j++){            if(j==0)                dp[i][j]=dp[i-1][j]+a[i][j];            else if(i==j)                dp[i][j]=dp[i-1][j-1]+a[i][j];            else                dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+a[i][j];        }    }    int res=0;    for(int j=0;j<n;j++){        res=max(res,dp[n-1][j]);    }    cout<<res<<endl;    return 0;}
1 0
原创粉丝点击