【gmoj】【动态规划】超级教主
题目
解题思路
设f[i]为跳到i时,剩余的能量值
可以发现f一定是单调不下降的(不然就跳不到n了)
那肯定是上一次跳到的地方越矮越好(因为花费少,且这次获得的能量更多)
代码
#include<iostream>
#include<cstdio>
using namespace std;
int n,x,h,sum[2000010],f[2000010];
int main()
{
scanf("%d%d",&n,&f[0]);
for (int i=1;i<=n;i++)
{
scanf("%d",&x);
sum[i]=sum[i-1]+x;
}
for (int i=1;i<=n;i++)
{
while (h<i&&f[h]<i*100) h++;
f[i]=f[h]-i*100+sum[i]-sum[h];
}
printf("%d",f[n]);
return 0;
}