이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <iostream>
#include <vector>
#include <algorithm>
#include <ctime>
#include <cmath>
#include <map>
#include <unordered_set>
#include <tuple>
#include <queue>
#include <set>
#include <cstring>
#include <functional>
#include <random>
#include <chrono>
#include <cassert>
#include <iomanip>
// #include <ext/pb_ds/assoc_container.hpp>
#define ar array
#define all(arr) (arr).begin(), (arr).end()
#define range(i, n) for (int i=0; i < (n); ++i)
#define rall(arr) (arr).rbegin(), (arr).rend()
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
using namespace std;
// using namespace __gnu_pbds;
/*
typedef tree<
int,
null_type,
less<int>,
rb_tree_tag,
tree_order_statistics_node_update>
ordered_set;
*/
const ll INF = 1e18;
const int INFi = 2e9;
const int maxN = 5e5 + 5;
const int md2 = 998244353;
const int md3 = 1e9 + 7;
double getTime() { return clock() / (double) CLOCKS_PER_SEC; }
void solve() {
int n;
cin >> n;
vector<int> a(n + 1);
range(i, n) cin >> a[i];
vector<ll> dp1(n + 1), dp2(n + 1);
dp1[0] = dp2[0] = 0;
for(int i = 1; i <= n; ++i) {
ll cur = 0;
for(int j = i - 1; j >= 0; --j) {
cur += a[j];
if (cur >= dp2[j]) {
if (dp1[j] + 1 > dp1[i]) {
dp1[i] = dp1[j] + 1;
dp2[i] = cur;
} else if (dp1[j] + 1 == dp1[i] && dp2[i] > cur) {
dp2[i] = cur;
}
}
}
}
cout << dp1[n];
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
// cout << setprecision(15) << fixed;
int tests = 1;
// cin >> tests;
range(_, tests) {
solve();
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |