#include<cstdio>
#define MAXN 1010
#define max(a,b) (a>b?a:b)
int arrive[MAXN],last[MAXN],dis[MAXN],range[MAXN],num[MAXN];
int main()
{
int m,n,k,sum=0;
freopen("bus.in","r",stdin);
freopen("bus.out","w",stdout);
scanf("%d %d %d",&n,&m,&k);
for(int i=1;i<n;i++)
scanf("%d",&dis[i]);
for(int i=1;i<=m;i++)
{
int start,end,t;
scanf("%d %d %d",&t,&start,&end);
num[end]++;
sum-=t;
if(t>last[start])
last[start]=t;
}
for(int i=1;i<=n;i++)
num[i]+=num[i-1];
for(int i=1;i<=k;i++)
{
int ra=n;
for(int i=2;i<=n;i++)
arrive[i]=max(arrive[i-1],last[i-1])+dis[i-1];
for(int i=n;i>=1;i--)
{
if(arrive[i]<last[i])
ra=i;
range[i]=max(i,ra);
}
int max=0,max1=0;
for(int i=1;i<=n;i++)
{
if(dis[i]!=0 && num[range[i]] - num[i-1] > max)
{
max1=i;
max=num[range[i]] - num[i-1];
}
}
dis[max1]--;
}
for(int i=2;i<=n;i++)
arrive[i]=max(arrive[i-1],last[i-1])+dis[i-1];
for(int i=2;i<=n;i++)
sum+=arrive[i] * (num[i]-num[i-1]);
printf("%d",sum);
return 0;
}
NOIP 2011 Day2 Problem3 (调试中)
最新推荐文章于 2020-08-30 16:07:47 发布