heiseon
我想站立在这个世界,却有太多的人不像我站起来。
posts - 0,  comments - 0,  trackbacks - 0
 

Poj1163

很简单很典型的一道DP题。

先解释下大概意思。给你一个三角形数阵,第i行就有i个数,如最上面的图。你在最上面开始往下走,每次可以往左下或者右下走,最后把你走过的地方的和加起来,求这个和可能达到的最大值。

重要的式子是:dp[i][j]=max(dp[i-1][j]+a[i][j],dp[i-1][j-1]+a[i][j]);

下面附上我的代码:

#include <stdio.h>

#define max(a,b) ((a)>(b))?(a):(b)

int main( )

{

       int n,i,j,a[102][102]={0},dp[102][102]={0},max=0;

       scanf("%d",&n);

       for(i=1;i<=n;i++)

                  for(j=1;j<=i;j++)

                         scanf("%d",&a[i][j]);

           for(i=1;i<=n;i++)

                  for(j=1;j<=i;j++)

                   dp[i][j]=max(dp[i-1][j]+a[i][j],dp[i-1][j-1]+a[i][j]);

           for(i=1;i<=n;i++){

                  if(max<dp[n][i]) 

                          max=dp[n][i];

               }

           printf("%d\n",max);

return 0;

}

 

posted on 2010-08-06 19:19 heiseon 阅读(352) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航:   博客园   博客园最新博文   博问   管理



<2026年6月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿

文章档案

搜索

  •  

最新评论