1. 程式人生 > >POJ 3176 Cow Bowling (簡單dp——數塔問題)

POJ 3176 Cow Bowling (簡單dp——數塔問題)

題意:其實就是數塔問題,找出一條加和最大的路徑,輸出最大和;

題解:data[i][j]=max(data[i-1][j],data[i-1][j-1])+data[i][j];

            突然發現只用一個數組就行,以前一直在用兩個陣列= =

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
    int i,j,t,n,data[351][351];
    while(~scanf("%d",&n))
    {
        memset(data,0,sizeof(data));//初始化陣列,清零
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=i;j++)
            {
                scanf("%d",&data[i][j]);
                data[i][j]=max(data[i-1][j],data[i-1][j-1])+data[i][j];//求出第i行第j個數的最優解
            }
        }
        for(i=1,t=data[n][0];i<=n;i++)//在最後一行中找出最大的輸出
            if(t<data[n][i])
               t=data[n][i];
        cout<<t<<endl;
    }
    return 0;
}