Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Implementare: Cristi Dospra
- Punctaj: 100p
- Utilizat: Programare Dinamica + fstream
- Complexitate: O(N^2)
- */
- #include <fstream>
- #include <algorithm>
- using namespace std;
- #define Nmax 1002
- ifstream fin ( "tmax.in" );
- ofstream fout ( "tmax.out" );
- int N, M, v[Nmax][Nmax];
- long long SusJos[Nmax][Nmax], JosSus[Nmax][Nmax], StDr[Nmax][Nmax], DrSt[Nmax][Nmax];
- const long long inf = 1000000000000000000LL;
- long long val, SumMax = -inf;
- int NrT = 0;
- void Precalc()
- {
- for ( int i = 1; i <= N; ++i )
- {
- for ( int j = 1; j <= M; ++j )
- StDr[i][j] = max ( StDr[i][j-1] + v[i][j], 1LL * v[i][j] );
- for ( int j = M; j >= 1; --j )
- DrSt[i][j] = max ( DrSt[i][j+1] + v[i][j], 1LL * v[i][j] );
- }
- for ( int j = 1; j <= M; ++j )
- {
- for ( int i = 1; i <= N; ++i )
- SusJos[i][j] = max ( SusJos[i-1][j] + v[i][j], 1LL * v[i][j] );
- for ( int i = N; i >= 1; --i )
- JosSus[i][j] = max ( JosSus[i+1][j] + v[i][j], 1LL * v[i][j] );
- }
- }
- void Check ( long long val )
- {
- if ( val > SumMax )
- {
- SumMax = val;
- NrT = 1;
- }
- else if ( val == SumMax )
- NrT++;
- }
- void Read()
- {
- fin >> N >> M;
- for ( int i = 1; i <= N; ++i )
- for ( int j = 1; j <= M; ++j )
- fin >> v[i][j];
- }
- void Solve()
- {
- for ( int i = 1; i <= N; ++i )
- {
- for ( int j = 1; j <= M; ++j )
- {
- // In sus
- if ( j > 1 && j < M && i > 2 )
- {
- val = StDr[i][j-1] + v[i][j] + DrSt[i][j+1] + v[i-1][j] + SusJos[i-2][j];
- Check ( val );
- }
- // In jos
- if ( j > 1 && j < M && i < N-1 )
- {
- val = StDr[i][j-1] + v[i][j] + DrSt[i][j+1] + v[i+1][j] + JosSus[i+2][j];
- Check ( val );
- }
- // In stanga
- if ( i > 1 && i < N && j > 2 )
- {
- val = StDr[i][j-2] + v[i][j-1] + v[i][j] + SusJos[i-1][j] + JosSus[i+1][j];
- Check ( val );
- }
- // In dreapta
- if ( i > 1 && i < N && j < M-1 )
- {
- val = SusJos[i-1][j] + JosSus[i+1][j] + v[i][j] + v[i][j+1] + DrSt[i][j+2];
- Check ( val );
- }
- }
- }
- }
- void Write ()
- {
- fout<<SumMax<<' '<<NrT;
- }
- int main()
- {
- Read();
- Precalc();
- Solve();
- Write();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement