#include <iostream> using namespace std; struct st { long long akt=0, k=0; }; st dp[3][5005]; long long sum=0; int main() { for(int j=0;j<=5003;j++) { dp[0][j].k=1000000000; } dp[0][0].k=0; int n; cin>>n; long long miniwyp=1e9; for(int i=1;i<=n;i++) { long long a; long long mini=1e9, akt=i%2, pop=(i-1)%2; for(int j=0;j<=5003;j++) { dp[akt][j].k=1000000000; } cin>>a; miniwyp=1e9; sum+=a; for(int j=1;j<=i;j++) { dp[akt][j].k=dp[pop][j-1].k+1; dp[akt][j].akt=dp[pop][j-1].akt+a; if(dp[pop][j-1].akt>=0) mini=min(mini, dp[pop][j-1].k); if(dp[akt][j].akt>=0) miniwyp=min(miniwyp, dp[akt][j].k); } dp[akt][0].k=mini; dp[akt][0].akt=a; if(dp[akt][0].akt>=0) miniwyp=min(miniwyp, dp[akt][0].k); } if(sum<0) { cout<<-1; return 0; } cout<<miniwyp; 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 | #include <iostream> using namespace std; struct st { long long akt=0, k=0; }; st dp[3][5005]; long long sum=0; int main() { for(int j=0;j<=5003;j++) { dp[0][j].k=1000000000; } dp[0][0].k=0; int n; cin>>n; long long miniwyp=1e9; for(int i=1;i<=n;i++) { long long a; long long mini=1e9, akt=i%2, pop=(i-1)%2; for(int j=0;j<=5003;j++) { dp[akt][j].k=1000000000; } cin>>a; miniwyp=1e9; sum+=a; for(int j=1;j<=i;j++) { dp[akt][j].k=dp[pop][j-1].k+1; dp[akt][j].akt=dp[pop][j-1].akt+a; if(dp[pop][j-1].akt>=0) mini=min(mini, dp[pop][j-1].k); if(dp[akt][j].akt>=0) miniwyp=min(miniwyp, dp[akt][j].k); } dp[akt][0].k=mini; dp[akt][0].akt=a; if(dp[akt][0].akt>=0) miniwyp=min(miniwyp, dp[akt][0].k); } if(sum<0) { cout<<-1; return 0; } cout<<miniwyp; return 0; } |