现在的位置: 首页 > 综合 > 正文

poj 1163The Triangle(水dp)

2014年10月12日 ⁄ 综合 ⁄ 共 642字 ⁄ 字号 评论关闭
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

const int maxn=102;
int dp[maxn][maxn];
int arr[maxn][maxn];

int main()
{
    int n,i,j;
    while(scanf("%d",&n)!=EOF)
    {
        for(i=1;i<=n;++i)
            for(j=1;j<=i;++j)
                scanf("%d",&arr[i][j]);
        memset(dp,0,sizeof(dp));
        dp[1][1]=arr[1][1];
        for(i=2;i<=n;++i)
        {
            dp[i][1]=arr[i][1]+dp[i-1][1];
            for(j=2;j<=i-1;++j)
            {
                dp[i][j]=arr[i][j]+ max(dp[i-1][j-1],dp[i-1][j]);
            }
            dp[i][i]=arr[i][i]+dp[i-1][i-1];
        }
        int ans=-1;
        for(i=1;i<=n;++i)
        if(dp[n][i]>ans)
        ans=dp[n][i];
        printf("%d\n",ans);
    }
    return 0;
}

随便在poj的online status 看ac的题目 然后做。。

第一个就看到这个了 在lrj的第一本白书 dp专题讲的第一道题。

挺水的

对于三角形中节点 上曾有两个节点可以走到它 看从哪个节点走到 的值大就行了 最左边和最右边单独处理。只有一个节点可以走到

抱歉!评论已关闭.