• 4.比赛F


    题目链接:http://acm.hust.edu.cn/vjudge/contest/126362#problem/F

    比赛的时候没有图,也没有看群消息,看到这题自己臆想出了一种走法。。。说明看题真的很重要,不要先入为主,主观臆测!!!!这题是一个数字三角形的问题,麻烦一点的是倒过来求,但弄清楚怎么走也很简单了。。感觉这个有点类似dijkstra 算法。。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    #define N 250
    int d[N][N],a[N][N];
    int main()
    {
        int t,n,m;
        int c=1;
        scanf("%d",&t);
        while(t--)
        {
            memset(d,0,sizeof(d));
            memset(a,0,sizeof(a));
            scanf("%d",&n);
            m=2*n-1;
            for(int i=1;i<=m;i++)//输入
            {
                if(i<=n)
                {
                    for(int j=1;j<=i;j++)
                    scanf("%d",&d[i][j]);
                }
                else
                {
                    for(int j=1;j<=(2*n-i);j++)//多写几个数 就找出规律了
                     scanf("%d",&d[i][j]);
                }
            }
            a[1][1]=d[1][1];//从d[1][1] 开始
            for(int i=2;i<=n;i++)
                for(int j=1;j<=i;j++)
                {
                    if(j==1)
                        a[i][j]=d[i][j]+a[i-1][j];
                    else if(j==i)
                        a[i][j]=d[i][j]+a[i-1][j-1];
                    else
                        a[i][j]=d[i][j]+max(a[i-1][j-1],a[i-1][j]);
                }
                for(int i=n+1;i<=m;i++)
                    for(int j=1;j<=2*n-i;j++)
                     a[i][j]=d[i][j]+max(a[i-1][j],a[i-1][j+1]);
                    printf("Case %d: ",c);
                     printf("%d
    ",a[m][1]);
                     c++;
        }
        return 0;
    }
  • 相关阅读:
    高中时代的记忆
    winscp连接vmware ubuntu
    linux下mysql环境支持中文配置步骤
    mysql中常用的语句整理
    linux服务器伪分布模式安装hadoop-1.1.2
    linux运维常用命令
    hbase 单机模式安装
    灰度发布
    HDU 5269 ZYB loves Xor I
    HDU 5536 Chip Factory
  • 原文地址:https://www.cnblogs.com/Twsc/p/5744427.html
Copyright © 2020-2023  润新知