poj 1163&3176 DP

来源:互联网 发布:java算法书籍 编辑:程序博客网 时间:2024/06/06 19:20

两个其实是一个题,给一个三角形,往里填满数,从上到下走一趟,求路过数字的和的最大值。

动态规划的第一道吧 - -,记忆化搜索  <注意边界!>

#include <cstdio>#include<string.h>using namespace std;const int maxn =102;int h,a[maxn][maxn],d[maxn][maxn];int dp(int i,int j){    if(d[i][j]>=0) return d[i][j];    return d[i][j]=a[i][j]+(i==h?0:        (dp(i+1,j)>dp(i+1,j+1)?dp(i+1,j):dp(i+1,j+1))  );}int main(){    while(~scanf("%d",&h))    {        for(int i=1;i<=h;i++)        for(int j=1;j<=i;j++)        scanf("%d",&a[i][j]);        memset(d,-1,sizeof(d));        printf("%d\n",dp(1,1));    }    return 0;}



0 0