【♂Not The Triumph♂O(∩_∩)O哈哈~But The Struggle♂】

竞赛决不是捷径,它只是另一种艰辛的生活方式。得到与失去,只有时间会去评判;成功与失败,只有历史能去仲裁。我不会永远成功,正如我不会永远失败一样

  C++博客 :: 首页 :: 联系 ::  :: 管理
  6 Posts :: 239 Stories :: 25 Comments :: 0 Trackbacks

常用链接

留言簿(7)

我参与的团队

搜索

  •  

积分与排名

  • 积分 - 108434
  • 排名 - 229

最新评论

阅读排行榜

评论排行榜

观察下面的数字金字塔。

写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。
        7
      3   8
    8   1   0
  2   7   4   4
4   5   2   6   5
在上面的样例中,从7 到 3 到 8 到 7 到 5 的路径产生了最大和:30。

INPUT FORMAT:

(file numtri.in)

第一个行包含 R(1<= R<=1000) ,表示行的数目。

后面每行为这个数字金字塔特定行包含的整数。

所有的被供应的整数是非负的且不大于100。

OUTPUT FORMAT:

(file numtri.out)

单独的一行包含那个可能得到的最大的和。

input:
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

output:
30

【参考程序】:

/*
ID: XIONGNA1
PROG: numtri
LANG: C++
*/
#include
<iostream>
#include
<cstdlib>
using namespace std;
int a[1001][1001],f[1001][1001];
int n;
int main()
{
    freopen(
"numtri.in","r",stdin);
    freopen(
"numtri.out","w",stdout);
    scanf(
"%d",&n);
    
for (int i=1;i<=n;i++)
        
for (int j=1;j<=i;j++)
            scanf(
"%d",&a[i][j]);
    
for (int i=1;i<=n;i++) f[n][i]=a[n][i];
    
for (int i=n-1;i>=1;i--)
        
for (int j=1;j<=i;j++)
            
if (f[i+1][j]>f[i+1][j+1]) f[i][j]=f[i+1][j]+a[i][j];
            
else f[i][j]=f[i+1][j+1]+a[i][j];
    printf(
"%d\n",f[1][1]);
    
return 0;
}


 

posted on 2009-07-16 14:51 开拓者 阅读(253) 评论(0)  编辑 收藏 引用 所属分类: USACO 题解

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理