Решение задачи Максимальная тройка с Acmp

Без пояснения   Просмотров: 66


В данной двумерной целочисленной таблице размером N × N требуется найти три элемента, сумма которых максимальна. При этом первый элемент должен быть соседним по горизонтали или вертикали со вторым, а второй — с третьим.

Код

// отправьте код, выбрав язык Microsoft Visual C++
#include <bits/stdc++.h>
using namespace std;

int sz;
vector< vector< short > > a;

bool ind_cheker(unsigned i)
{
    if(i < 0)
        return false;
    if(i >= sz)
        return false;
    return true;
}

int max_value(unsigned i, unsigned j)
{
    int res = -400;

    bool iplus1 = ind_cheker(i + 1);
    bool jmin1 = ind_cheker(j - 1);
    bool jplus1 = ind_cheker(j + 1);
    bool imin1 = ind_cheker(i - 1);

    if(iplus1 * jmin1)
       res = max(a.at(i).at(j) + a.at(i + 1).at(j) + a.at(i + 1).at(j - 1), res);

    if(iplus1 * jplus1)
       res = max(a.at(i).at(j) + a.at(i + 1).at(j) + a.at(i + 1).at(j + 1), res);

    if(imin1 * jmin1)
       res = max(a.at(i).at(j) + a.at(i - 1).at(j) + a.at(i - 1).at(j - 1), res);

    if(imin1 * jplus1)
       res = max(a.at(i).at(j) + a.at(i - 1).at(j) + a.at(i - 1).at(j + 1), res);



    if(ind_cheker(i - 2))
       res = max(a.at(i).at(j) + a.at(i - 1).at(j) + a.at(i - 2).at(j), res);

    if(ind_cheker(j - 2))
       res = max(a.at(i).at(j) + a.at(i).at(j - 1) + a.at(i).at(j - 2), res);

    return res;
}


int main()
{

    cin >> sz;
    vector< short > t(sz);
    for(unsigned i = 0; i < sz; ++i) {
        for(unsigned j = 0; j < sz; ++j)
            scanf("%hd", &t.at(j));
        a.push_back(t);
    }


    int mx = -400;
    for(unsigned i = 0; i < a.size(); ++i) {
        for(unsigned j = 0; j < a.at(i).size(); ++j) {
            mx = max(max_value(i, j), mx);
        }
    }
    cout << mx;
    return 0;
}

         

Администратор Photo Автор: Администратор



Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться