POJ 3176 Cow Bowling

题目链接:http://poj.org/problem?id=3176

这是一题简单的DP,很基础,给你一个数塔,让你从顶层往下搜索到底层出权值最大的路径,只需要把递推方程式写出来,基本就能做出来了。

公式:dp[i][j]=max(dp[i-1][j-1],dp[i-1][j])+num[i][j]

代码:

#include <iostream>
#include <cstdio>

using namespace std;

int num[352][352];
int dp[352][352];
int max(int a,int b)
{
    return a>b?a:b;
}

int main()
{
    int N;
    scanf("%d",&N);
    scanf("%d",&num[1][1]);
    dp[1][1]=num[1][1];
    for(int i=2;i<=N;i++)
        for(int j=1;j<=i;j++)
        {
            scanf("%d",&num[i][j]);
            dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+num[i][j];
            if(i==N)
                dp[N][0]=max(dp[N][0],dp[N][j]);
        }
    printf("%d\n",dp[N][0]);
    return 0;
}




你可能感兴趣的:(dp,搜索,ACM,poj)