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
#include <bits/stdc++.h>
using namespace std;
#define h 500100
#define inf 999999999
long long T_naj[h], dp[h], sts_niefart[h];
int main()
{
   ios_base::sync_with_stdio(0);
   int n; cin>>n;
   long long bi=0;
   for (int i=0;i<n;i++)  { cin>>T_naj[i]; bi+=T_naj[i]; dp[i]=inf; }
   if (bi<0) { cout<<-1; return 0; } //sprawdzanie czy mozliwe
   for (long long i=0;i<n;i++)
   {
       long long sum=0, ost_pod=i, co_bylo=0, r=0;
       if (i!=0) co_bylo+=dp[i-1]; //case ze previous dp nie istnieje
       if (co_bylo==inf) continue;
       for (long long k=i;k<n;k++)
       {
           if ( sum<0 && sum+T_naj[k]>=0 ) ost_pod=k;
           sum+=T_naj[k];
           if (sum>=0)
           {
               if ( T_naj[k]<0 ) ost_pod=k; //podlaczamy bo to fabryka
               dp[k] = min( dp[k], co_bylo+ost_pod-i );
           }
       }
   }
   cout<<dp[n-1]<<endl;





  return 0;
}