题意:求将一串数据尽可能多分成所有前缀和大于0的连续子串。
思路:由于是要求所有前缀和大于0,那么只要从后往前推就好了。
#include<bits/stdc++.h> using namespace std; const int maxn = 1e6 + 7; long long arr[maxn], n; int main(){ while(~scanf("%d", &n)){ for(int i = 0; i < n; i ++) scanf("%lld", &arr[i]); int ans = 0; long long sum = 0; for(int i = n - 1; i >= 0; i --) { sum += arr[i]; if(sum >= 0){ ans ++; sum = 0; } } printf("%d ",ans); } return 0; }