【题目链接】
【思路要点】
- 补档博客,无题解。
【代码】
#include<bits/stdc++.h> #define MAXN 1000005 using namespace std; int n, a[MAXN]; long long f[MAXN]; int main() { int T; scanf("%d", &T); while (T--) { scanf("%d", &n); for (int i = 1; i <= n; i++) scanf("%d", &a[i]); f[2] = a[1]; for (int i = 3; i <= n + 1; i++) f[i] = min(f[i - 2] + a[i - 1], f[i - 3] + max(a[i - 1], a[i - 2])); printf("%lld ", min(f[n], f[n + 1])); long long ans = 0; for (int i = 2; i <= n; i++) { int tmp = min(a[i], a[i - 1]); ans += tmp; a[i] -= tmp; a[i - 1] -=tmp; } printf("%lld\n", ans); } return 0; }