当前位置: 代码迷 >> C语言 >> 这个是在论坛里看到的。。。盯了一下午了。。。什么都么盯出来。。
  详细解决方案

这个是在论坛里看到的。。。盯了一下午了。。。什么都么盯出来。。

热度:296   发布时间:2008-01-27 20:14:16.0
这个是在论坛里看到的。。。盯了一下午了。。。什么都么盯出来。。
#include "stdio.h"
#define N 100000
int main()
{
        long n,i,j,a[N]={0},b[N]={0},Mt,Max,temp;
         while(scanf("%d",&n)!=EOF)
         {
                         Max=0;
                         for(i=1;i<=n;i++)
          {
             for(j=1;j<=i;j++)
                         scanf("%ld",&a[j]);
                            a[j]=0;
                if(i==1)
                                {
                            for(j=1;j<=i;j++)
                                        {
                                       b[j]=a[j];
                                        Max=b[j];
                                        }
                                         b[j]=0;
                                }
                 else
                 {
                         Mt=0;
                         for(j=1;j<=i;j++)
                         {
                            temp=b[j];
                            if(b[j]>Mt) Mt=b[j];
                            b[j]=Mt+a[j];
                            if(b[j]>Max) Max=b[j];
                            Mt=temp;
                                                 }
                                                 b[j]=0;
                 }
          }
     printf("It will take him %ld steps!\n",Max);
   
        }
         return 0;
}
红色的地方我绕啊绕绕不出来了。。。。大家帮帮忙。。。我盯的眼睛都直了
原题是:
goldfisher为了解救被绑架的未婚妻而来到了恶魔岛。上岛前,一个神秘的印度人yingnan告诉他恶魔岛处处布满陷阱,只有沿着地上标记数字和为最大的路径才能找到公主。为此他给goldfisher画了一个草图,假使地上标记的数字如下:
   1
  2 3
.1 5 9
9 1 1 1
其中的最大路径是1-3-9-1,最大的和是14,只有沿着这条路径走,才能找到公主。goldfisher犯难了,因为现实中标记的数字更多,难度更大。你能帮助goldfisher找到正确的道路解救他的未婚妻吗?
是在论坛里看到的。。。。
搜索更多相关的解决方案: long  include  

----------------解决方案--------------------------------------------------------
题目在哪?
最佳核心算法:DP
----------------解决方案--------------------------------------------------------
回楼上,题目在http://yzfy.org/bbs/viewthread.php?tid=34

[[it] 本帖最后由 雨中飞燕 于 2008-1-30 20:06 编辑 [/it]]
----------------解决方案--------------------------------------------------------
#include<stdio.h>
#include<conio.h>
int max(int r,int t)
{
    if(r>t) return r;
    else return t;
}
int main(void)
{
    int i,j;
    int n;
    int temp;
    int line[100001]={0};
    scanf("%d",&n);
    for(i=1;i<=n;i++)
       for(j=i;j>0;j--)
      {
        scanf("%d",&temp);
        line[j]=max(line[j],line[j-1])+temp;
      }
    temp=0;
    for(i=1;i<=n;i++) temp=max(temp,line[i]);
    printf("%d\n",temp);
    getch(); /*测评时去掉*/
    return 0;
}

[[it] 本帖最后由 卧龙孔明 于 2008-1-30 20:50 编辑 [/it]]
----------------解决方案--------------------------------------------------------
去看了看才知道,N<=100
以上程序中将1000001改成101就可以了,否则memset用时巨大
#include<stdio.h>
#include<string.h>
int max(int r,int t)
{
    if(r>t) return r;
    else return t;
}
int main(void)
{
    int i,j;
    int n;
    int temp;
    int line[101]={0};
    while(scanf("%d",&n)!=EOF)
    {
      memset(line,0,sizeof(line));
      for(i=1;i<=n;i++)
        for(j=i;j>0;j--)
        {
          scanf("%d",&temp);
          line[j]=max(line[j],line[j-1])+temp;
        }
      temp=0;
      for(i=1;i<=n;i++) if(temp<line[i]) temp=line[i];
      printf("It will take him %d steps!\n",temp);
    }
    return 0;
}
----------------解决方案--------------------------------------------------------
  相关解决方案