题面

题意
有一个人和一头牛,人的速度是rf,牛的速度是bf,牛的速度一定比人快,在长L的路程中,人将一直走,而牛可以在休息站停留,有N个休息站,每个休息站有鲜度为ci的草,牛在每个休息站停留的时间t 乘鲜度ci可以得到一些鲜度,牛不能在人的后面,只能领先人走,求牛能得到的最大鲜度和
思路
这个题目看起来可能觉得有点难度,但是细想的话会发现其实它就是贪心算法。牛的速度比人快,假象牛停在当前所有休息位置中的任意一个。我们可以发现这个位置的鲜度越大那么它的鲜度和就是最大的。由此我们可以按照下图的做法来解答
AC代码

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
ll L,n,f,b,a[100005],c[100005],sum=0,t=0,q;//t表示上一个点
ll sou(ll i){
ll ans=i;
for(;i<=n;i++){
	if(c[ans]<=c[i]) ans=i;
}
return ans;
}
int main(){
cin>>L>>n>>f>>b;
for(ll i=1;i<=n;i++)
cin>>a[i]>>c[i];
for(ll i=1;i<=n;i++){
q=sou(i);
i=q;
sum=sum+c[q]*(f-b)*(a[q]-a[t]);
t=q;
}
cout<<sum<<endl;
}