POJ-1163-The Triangle

来源:互联网 发布:电脑编程游戏 编辑:程序博客网 时间:2024/05/18 03:50

算是比较简单的DP题吧,求最上面到最下面的最大和的路径。

注意一点就是每行的第一个和最后一个不用特殊处理,也就是说第一个只能加上上行的第一个,最后一个只能加上上一行的最后一个,囧!

代码:

#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int maxn=101;int map[maxn][maxn],dp[2][maxn];int main(){    int n;    while(scanf("%d",&n)!=EOF)    {for(int i=1;i<=n;i++)    for(int j=1;j<=i;j++)scanf("%d",&map[i][j]);memset(dp,0,sizeof(dp));dp[0][1]=map[1][1];int now=1;for(int i=2;i<=n;i++,now^=1)    for(int j=1;j<=i;j++)dp[now][j]=max(dp[now^1][j],dp[now^1][j-1])+map[i][j];int ans=0;for(int i=1;i<=n;i++)    ans=max(ans,dp[now^1][i]);printf("%d\n",ans);    }    return 0;}