码迷,mamicode.com
首页 > 其他好文 > 详细

poj1163The Triangle(DP)

时间:2014-11-08 23:42:45      阅读:329      评论:0      收藏:0      [点我收藏+]

标签:poj   dp   

题目意思:

给出一个数字三角形,计算从头走到尾的数字之和的最大值。规定只能向下向右下走。

http://poj.org/problem?id=1163

题目分析:

简单DP,动态转化方程:dp[i][j]=max(dp[i+1][j],dp[i+1][j+1])+a[i][j].从下到上进行dp


AC代码:

#include<iostream>
using namespace std;
int a[101][101],dp[101][101];
int main()
{
    int n;
    while(cin>>n){
        for(int i=1;i<=n;i++){
            for(int j=0;j<i;j++){
                cin>>a[i][j];
            }
        }
        for(int i=n;i>0;i--){//从下往上dp(只能上后左上)
            for(int j=0;j<i;j++){
                if(i==n) {
                    dp[i][j]=a[i][j];
                    //cout<<dp[i][j]<<" ";
                }
                else{
                    dp[i][j]=max(dp[i+1][j],dp[i+1][j+1]);
                    dp[i][j]+=a[i][j];
                    //cout<<dp[i][j]<<" ";
                }
            }
        }
        cout<<dp[1][0]<<endl;
    }
    return 0;
}

poj1163The Triangle(DP)

标签:poj   dp   

原文地址:http://blog.csdn.net/fool_ran/article/details/40929965

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!