Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define NN 210
- using namespace std;
- ifstream in("cladire2.in");
- ofstream out("cladire2.out");
- struct poz
- {
- int i , j ;
- };
- int a[NN][NN],b[NN][NN];
- int sum_lin , sum_col;
- int n , m ;
- void input()
- {
- in >> n >> m ;
- for ( int i = 1; i <= n ; ++ i )
- for (int j = 1 ; j <= m ; ++ j )
- { in >> a[i][j];
- if ( i == 1 ) {sum_lin+=a[i][j];
- b[i][j]=sum_lin; // pun pe prima linie
- }
- if(j == 1 ) { sum_col += a[i][j];
- b[i][j]= sum_col; // si pe prima coloana
- }
- }
- }
- vector <poz>v;
- int main()
- { input();
- for (int i = 2 ; i <= n ; ++ i )
- for( int j = 2; j <= m ; ++j )
- b[i][j] = max (b[i-1][j],b[i][j-1]) + a[i][j];
- // construiesc matricea b dinamic
- out << b[n][m] << "\n"; // afisez suma maxima
- poz k ;
- int i = n ;int j = m ;
- // plec din dreapta jos
- for( ; ; )
- {
- k.i=i,k.j=j;
- v.push_back(k);
- if(a[i-1][j]>a[i][j-1] && i>1)
- {
- --i;
- }
- // ma duc ori sus
- else --j;
- //ori stanga
- if( i== 1 && j == 1 )break; //cand am ajung acasa am iesit
- }
- out << "1 1\n"; // afiez poz initiala
- for ( int g = v.size()-1 ; g>-1 ; --g)
- out << v[g].i<<" "<<v[g].j<<"\n";
- //si restul
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement