DP--数字三角形 (POJ 3176 && hihoCoder 1037)

来源:互联网 发布:注册广州淘宝商城公司 编辑:程序博客网 时间:2024/05/21 15:47

好好看看紫书吧 = =!(总感觉太浮躁了)

数字三角形,给你一个三角形形状的数字阵,开始从第一行第一列出发,只能向左或者向右,求最大值?

POJ 3176  DP--数字三角形


#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 350 + 10;int a[maxn][maxn];int dp[maxn][maxn];int main(){    int n;    scanf("%d",&n);    for (int i = 1; i <= n; ++i){        for (int j = 1; j <= i; ++j){            scanf("%d",&a[i][j]);        }    }    for (int i = n; i >= 1; --i){        for (int j = 1; j <= i; ++j){            dp[i][j] = max(dp[i+1][j],dp[i+1][j+1]) + a[i][j];        }    }    printf("%d\n",dp[1][1]);    return 0;}

hihoCoder 1037 

同上:

 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 200 + 10; int a[maxn][maxn], dp[maxn][maxn]; int main(){    int n;    while(scanf("%d",&n) == 1){        memset(dp,0,sizeof dp);        for (int i = 1; i <= n; ++i){            for (int j = 1; j <= i; ++j){                scanf("%d",&a[i][j]);            }        }        for (int i = n; i >= 1; --i){            for (int j = 1; j <= i; ++j){                dp[i][j] = max(dp[i+1][j],dp[i+1][j+1]) + a[i][j];            }        }        printf("%d\n",dp[1][1]);    }    return 0; }


0 0
原创粉丝点击