【1】题解:P1315 [NOIP 2011 提高组] 观光公交【贪心】
练习贪心中。首先你发现一辆车一定要等齐站点内所有人再出发。然后你考虑到加速的限度:不能让车等人。这样就可以预处理出一个站点的人数(
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,m,k,d[N],t[N],a[N],b[N];
int l[N],s[N],w[N],p[N],ans;
void utime(){ for(int i=1;i<=n;i++) l[i]=max(l[i-1],w[i-1])+d[i-1]; }
int main(){
cin>>n>>m>>k;
for(int i=1;i<n;i++) cin>>d[i];
for(int i=1;i<=m;i++) cin>>t[i]>>a[i]>>b[i];
for(int i=1;i<=m;i++)
s[b[i]]++, w[a[i]]=max(w[a[i]],t[i]);
utime();
for(int j=1;j<=k;j++){
for(int i=n;i-1;i--){
p[i-1]=s[i];
if(l[i]>w[i]) p[i-1]+=p[i];
}
int u=0;
for(int i=1;i<=n;i++)
if(d[i]&&p[i]>p[u]) u=i;
d[u]--;
utime();
}
for(int i=1;i<=m;i++) ans+=l[b[i]]-t[i];
cout<<ans;
return 0;
}