C++萌新求助66分

P1216 [USACO1.5] [IOI1994]数字三角形 Number Triangles

_Eterna1 @ 2017-08-11 21:34:12

#include <cstdio>
#include <iostream>
using namespace std;
int max(int i,int j);
int main()
{
    int i,j,n,ans=0,a[1000][1000];
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        for(j=1;j<=i;j++)scanf("%d",&a[i][j]);
    int max=0,tempj;
    bool lf;
    for(j=1;j<=n;j++)
    {
        if(a[n-1][j]+a[n][j]>max)
        {
            max=a[n-1][j]+a[n][j];
            lf=true;
            tempj=j;
        }
        if(a[n-1][j-1]+a[n][j]>max)
        {
            max=a[n-1][j-1]+a[n][j];
            lf=false;
            tempj=j;
        }
    }
    ans+=a[n][tempj];
    printf("%d %d\n",tempj,a[n][tempj]);
    j=tempj;
    for(i=n-1;i>=2;i--)
    {
        if(lf==true)ans+=a[i][j];else
        {
            j--;
            ans+=a[i][j];
        }
        if(a[i-1][j]>a[i-1][j-1])lf=true;
        if(a[i-1][j]<a[i-1][j-1])lf=false;
        printf("%d %d\n",j,a[i][j]);
    }
    ans+=a[1][1];
    // printf("%d %d %d\n",a[n][tempj],tempj,lf);
    printf("%d",ans);
    return 0;
}
//7
//3 8
//8 1 0
//2 7 4 4
//4 5 2 6 5

by _Eterna1 @ 2017-08-12 11:01:42

我的思路

读入以后,把最后一行中每个数过一遍,把加上它上面左右两个最大的找出来并确定方向

从n-1行开始倒着向上找(方法同上)并累加直到顶端得出答案


by HHCY @ 2017-08-30 11:31:38

#include<cstdio>
#include<algorithm>
using namespace std;
int n,a[1002][1002];
int main()
{
    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=n;i>=2;i--)
    for(int j=1;j<i;j++)
    a[i-1][j]+=max(a[i][j],a[i][j+1]);
    printf("%d",a[1][1]);
    return 0;
}

|