#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,所以对前面无影响

京公网安备 11010502036488号