题目链接
贪心
从i等于0开始遍历,不管i等于0时的值是奇数还是偶数,除以2,把能吃的吃完,如果是奇数,会剩下一口,i等于1的值大于1,则这剩下的一口和i等于1里的一口凑成两口,则吃的总次数加一,i等于1的值减1,一直遍历到最后一个;
注意如果是n个美食,要开一个n+1的数组并初始化为0,因为,如果只开size为n的数组,循环里当i等于n-1时,a[i+1]会是a[n],a[n]未被开辟内存,它被分配的值是随机的,可能导致a[i+1]>0为true,进而总数多加了1
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
long long ans=0;
cin>>n;
int a[n+1];
memset(a,0,sizeof(a));
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n;i++)
{
ans+=a[i]/2;
if(a[i]%2&&a[i+1]>0)
{
a[i+1]--;
ans++;
}
}
cout<<ans<<endl;
return 0;
}