// Tadeusz Kielak
#include <iostream>
using namespace std;
#define MAX_MIAST 500001
long miasta[ MAX_MIAST ];
long n;
void show()
{
long i;
cout << "m:\t";
for( i = 0; i < n; i ++ )
{
cout << miasta[ i ] << ' ';
}
cout << endl;
}
long koszt( long i, long j)
{
long k, koszt_min, bilans_mocy, koszt_pom1, koszt_pom2;
koszt_min = j - i - 1 ;
bilans_mocy = 0;
for( k = i; k < j - 1; k ++)
{
bilans_mocy += miasta[ k ];
// cout << i << " " << k + 1 << '\t';
// cout << k + 1 << " " << j << '\n';
koszt_pom1 = koszt( i, k + 1);
koszt_pom2 = koszt( k +1, j );
if( koszt_pom1 != -1 && koszt_pom2 != -1 )
if( koszt_min > koszt_pom1 + koszt_pom2 )
koszt_min = koszt_pom1 + koszt_pom2;
}
bilans_mocy += miasta[ j - 1];
if( bilans_mocy < 0)
return -1;
return koszt_min;
}
int main()
{
long i, j,bilans_mocy;
bilans_mocy = 0;
cin >> n;
for( i = 0; i < n; i ++ )
{
cin >> j;
miasta[ i ] = j;
bilans_mocy += j;
}
if( bilans_mocy < 0 )
{
cout << -1 << '\n';
return 0;
}
cout << koszt( 0, n ) << '\n';
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | // Tadeusz Kielak #include <iostream> using namespace std; #define MAX_MIAST 500001 long miasta[ MAX_MIAST ]; long n; void show() { long i; cout << "m:\t"; for( i = 0; i < n; i ++ ) { cout << miasta[ i ] << ' '; } cout << endl; } long koszt( long i, long j) { long k, koszt_min, bilans_mocy, koszt_pom1, koszt_pom2; koszt_min = j - i - 1 ; bilans_mocy = 0; for( k = i; k < j - 1; k ++) { bilans_mocy += miasta[ k ]; // cout << i << " " << k + 1 << '\t'; // cout << k + 1 << " " << j << '\n'; koszt_pom1 = koszt( i, k + 1); koszt_pom2 = koszt( k +1, j ); if( koszt_pom1 != -1 && koszt_pom2 != -1 ) if( koszt_min > koszt_pom1 + koszt_pom2 ) koszt_min = koszt_pom1 + koszt_pom2; } bilans_mocy += miasta[ j - 1]; if( bilans_mocy < 0) return -1; return koszt_min; } int main() { long i, j,bilans_mocy; bilans_mocy = 0; cin >> n; for( i = 0; i < n; i ++ ) { cin >> j; miasta[ i ] = j; bilans_mocy += j; } if( bilans_mocy < 0 ) { cout << -1 << '\n'; return 0; } cout << koszt( 0, n ) << '\n'; return 0; } |
English