zoukankan      html  css  js  c++  java
  • 百度--最大和

    在一个N*N的数组中寻找所有横,竖,左上到右下,右上到左下,四种方向的直线连续D个数字的和里面最大的值 

    输入描述:

    每个测试输入包含1个测试用例,第一行包括两个整数 N 和 D :
    3 <= N <= 100
    1 <= D <= N
    接下来有N行,每行N个数字d:
    0 <= d <= 100

    输出描述:

    输出一个整数,表示找到的和的最大值

    输入例子:

    4 2
    87 98 79 61
    10 27 95 70
    20 64 73 29
    71 65 15 0

    输出例子:

    193

    基本思路:分四种情况获取所求和:

    1、从左到右,按行去遍历数组

    2、从上到下,按列遍历数组

    3、从左上到右下遍历数组

    4、从左下到右上遍历数组

    #include<bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        int n,d;
        cin>>n>>d;
        int** p = new int*[n];
        int max_sum=0;
        for (int i = 0; i <n; ++i)
        {
            p[i] = new int[n];
        }
        for (int i = 0; i < n; ++i)
        {
            for (int j = 0; j < n; ++j)
            {
                cin >> p[i][j];
            }
        }
    
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n-d+1;j++)
            {
                int sum=0;
                for(int k=j;k<j+d;k++)
                {
                    sum+=p[i][k];
                }
                    if(max_sum<sum)
                    max_sum=sum;
            }
        }
        
        for(int j=0;j<n;j++)
        {
            for(int i=0;i<n-d+1;i++)
            {
                int sum=0;
                for(int k=i;k<i+d;k++)
                {
                    sum+=p[k][j];
                }
                if(max_sum<sum)
                    max_sum=sum;
            }
        }
       
        for(int i=0;i<n-d+1;i++)
        {
            for(int j=0;j<n-d+1;j++)
            {
                int sum=0;
                int q=j;
                for(int k=i;k<d+i;k++)
                {
                    sum+=p[k][q];
                    q++;
                }
    
                    if(max_sum<sum)
                    max_sum=sum;
            }
        }
       
        for(int i=n-1;i>=d-1;i--)
        {
            for(int j=0;j<n-d+1;j++)
            {
                int sum=0;
                int q=j;
                for(int k=i;k>=i-d+1;k--)
                {
    
                    sum+=p[k][q];
                    q++;
                }
    
                    if(max_sum<sum)
                    max_sum=sum;
            }
        }
        cout<<max_sum<<endl;
    /*
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
                cout<<p[i][j]<<" ";
            cout<<endl;
        }
    */
        return 0;
    }
  • 相关阅读:
    efibootmgr的使用,删除UEFI主板多余启动项。
    各种压缩解压缩命令。
    tar命令排除某文件目录压缩的方法
    豪迪QQ2013群发器破解版9月7日版
    linux virtualbox 访问 usb
    用PPA安装fcitx和搜狗输入法Linux版
    python按行读取文件,去掉换行符" "
    Git常用命令
    Spring中@Autowired 注解的注入规则
    idea导入mavenJar、mavenWeb项目
  • 原文地址:https://www.cnblogs.com/omelet/p/6822049.html
Copyright © 2011-2022 走看看