当前小朋友分的糖果数与相邻两人的糖果数有关,采用动态规划方法。第i个先与第i-1比较,若分数高,则糖果比i-1多一个。接着再第i个与i+1比较,若分数高,则糖果比i+1多一个,但要考虑多一个会不会小于等于i-1的糖果,所以需要取最大值。
#include#define ll long long using namespace std; int n; int num[100007],cas[100007]; int main() { cin>>n; for(int i=1;i<=n;i++)//每个小朋友最少一颗糖果,先都定义好为1 { cin>>num[i]; cas[i]=1; } ll ans=0; for(int i=2;i<=n;i++) { if(num[i]>num[i-1]) cas[i]=cas[i-1]+1; } for(int i=n-1;i>0;i--) { if(num[i]>num[i+1]) cas[i]=max(cas[i],cas[i+1]+1);//考虑多一个会不会小于等于i-1的糖果,所以需要取最大值 } for(int i=1;i<=n;i++) ans+=cas[i]; cout<



