首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个简单的c题目,可就是想不通,请问!

2012-03-19 
一个简单的c题目,可就是想不通,请教大虾!!! 背景介绍:goldfisher为了解救被绑架的未婚妻而来到了恶魔岛。上

一个简单的c题目,可就是想不通,请教大虾!!!

背景介绍:
goldfisher为了解救被绑架的未婚妻而来到了恶魔岛。上岛前,一个神秘的印度人yingnan告诉他恶魔岛处处布满陷阱,只有沿着地上标记数字和为最大的路径才能找到公主。为此他给goldfisher画了一个草图,假使地上标记的数字如下:
      1
    2   3
  1   5   9
9   1   1   1
其中的最大路径是1-3-9-1,最大的和是14,只有沿着这条路径走,才能找到公主。goldfisher犯难了,因为现实中标记的数字更多,难度更大。你能帮助goldfisher找到正确的道路解救他的未婚妻吗?
(作者:ZUCC   ACM   03级队员   胡彧横)

注:地图为等腰三角形,必须置顶向下,且每次仅能访问相邻两个子路径。本例中:  
第一层   1   可达   2、3   两点    
第二层   2   可达   1、5   两点   ;   3   可达   5、9   两点,以此类推

输入:
本题包含多组测试数据,其中第一行为N(1   <=   N   <=   65535),表示将要进过的关卡数。
接下来N行为通往目的地图。
输出:
输出   It   will   take   him   s   steps!
其中   s为对应地图最长路径值。
输入样例:
4
1
2   3
1   5   9
9   1   1   1

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


输出样例:
It   will   take   him   14   steps!
It   will   take   him   30   steps!


[解决办法]
#include <stdio.h>

#define MAXX(64*1024)
#define xmax( a , b )((a)> =(b)?(a):(b))

int main()
{
while( 1 )
{
int n , i , j , c1[MAXX] , c2[MAXX] , *p1 = c1, *p2 = c2, *t;
scanf( "%d%d " , &n , &p1[0] );
for( i = 2; i <= n; ++i )
{
for( j = 0; j < i; ++j )
scanf( "%d " , &p2[j] );
p2[0]+=p1[0]; p2[i-1]+=p1[i-2];
for( j = 1; j+1 <i; ++j )
p2[j] += xmax( p1[j-1] , p1[j] );
t = p1 , p1 = p2 , p2 = t;
}
for( i = 1 , j = p1[0]; i < n; ++i ) j = xmax( j , p1[i] );
printf( "It will take him %d steps!\n " , j );
}

return 0;
}

热点排行