poj1163The Triangle(DP)

来源:互联网 发布:苏宁 算法研究员 面试 编辑:程序博客网 时间:2024/05/01 17:38

题目意思:

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

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;}

1 0
原创粉丝点击