#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
void solve(){
	int n;cin>>n;
	vector<int> a(n+1);
	for(int i=1;i<=n;i++) cin>>a[i];
	int ans=0;
	for(int i=n-2;i>=1;i--){
		int t=min({a[i],a[i+1]/2,a[i+2]/3});
		ans+=t*5;
		a[i]-=t;
		a[i+1]-=2*t;
		a[i+2]-=3*t;
	}
	for(int i=1;i<=n;i++) ans+=a[i];
	cout<<ans;
}
signed main(){
	cin.tie(nullptr)->sync_with_stdio(false);
	solve();
	return 0;
}

想了一会,大概清楚了
一般来说,大部分人都会写成从前向后贪心,但是会有问题
对于一个用例,其中任何一个数可以写成 N = 3X + 2Y + Z + C
每一个c都是孤立的,无法构成1,2,3的形式,所以,问题就变成了,先贪心3还是1,很明显,如果从前往后贪心,那么可能会贪掉后面的部分2和1,造成后面无法构成1,2,3,但是从后往前贪心,由于最后一个必定只能贪3,所以对前面无影响