SCU_1114_数字三角

来源:互联网 发布:java 热替换 匿名类 编辑:程序博客网 时间:2024/05/18 03:47
Time Limit:0MS     Memory Limit:0KB     64bit IO Format:%lld & %llu
Submit Status

Description

下图是个数字三角,请编写一个程序计算从顶部至底部某处一条路径,使得该路径所经过的数字总和最大。

7

3  8

8  1  0

2  7  4  4

1.  每一步可沿左斜线向下或右斜线向下走;

2.  1<=三角形行数<=100

3.  三角形中的数字为整数 0,1,……,99。

4.  如果有多种情况结果都最大,任意输出一种即可。

 

输入:

第一行一个整数N,代表三角形的行数。

接下来N行,描述了一个数字三角。

 

输出:

    第一行一个整数,代表路径所经过底数字总和。

    第二行N个数,代表所经过的数字。

 

样例:

输入:


7
3 8
8 1 0
2 7 4 4

输出:

25 
7 3 8 7



基础的动态规划问题,这个题点在把最大值的路径输出来,我用的方法是在搜索最大值的同时,把相应的行号列号也存起来,

这样的话输出路径就可以循着线索找了


#include <iostream>
#include <stdio.h>
#include <string.h>




struct node
{
    int z,x,y;
};


const int maxn=110;
node dp[maxn][maxn];


using namespace std;
int a[maxn][maxn];


int max(node a,node b)
{
    return a.z>b.z?a.z:b.z;
}


void solve(int i,int j,int n)
{
    for(j=1;j<=n;j++) {
        dp[n][j].z=a[n][j];
        dp[n][j].x=n;
        dp[n][j].y=j;
    }
    for(i=n-1;i>=1;i--)
    {
        for(j=1;j<=n;j++)
        {
            dp[i][j].z=a[i][j]+max(dp[i+1][j].z,dp[i+1][j+1].z);
            if(dp[i+1][j].z>=dp[i+1][j+1].z)
            {
                dp[i][j].x=i+1;
                dp[i][j].y=j;
            }
            else
            {
                dp[i][j].x=i+1;
                dp[i][j].y=j+1;
            }
        }
    }
   /*for(i=n;i>=1;i--)
    {
        for(j=1;j<=n;j++)
        {
            cout<<dp[i][j].x<<" "<<dp[i][j].y<<" ";
        }
        cout<<endl;
    }*/
}


int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        memset(dp,0,sizeof(dp));
        memset(a,0,sizeof(a));
        for(int i=1;i<=n;i++)
        for(int j=1;j<=i;j++) scanf("%d",&a[i][j]);


        solve(1,1,n);
        printf("%d\n",dp[1][1].z);
        int i,j;
        cout<<a[1][1]<<" ";
        i=dp[1][1].x;
        j=dp[1][1].y;int a1,b;
        for(int p=1;p<=n-1;p++)
        {
            a1=i;b=j;
            cout<<a[i][j]<<" ";
            i=dp[a1][b].x;
            j=dp[a1][b].y;
        }printf("\n");
    }
    return 0;
}

0 0
原创粉丝点击