NOIP提高组2011 观光公交
2016-11-01 19:26
357 查看
贪心。 每次加速器都要用在人最多的地方。 并且不能出现车子在等人的情况,否则就算加速也没什么用。 #include<cstdio> const int N=111111; int t ,a ,b ,d ,sum ,Time ,f ,g ; int n,m,k,ans; int max(int A,int B) { return A>B? A:B; } int main() { scanf("%d%d%d",&n,&m,&k); for (int i=1;i<n;i++) scanf("%d",&d[i]); for (int i=1;i<=m;i++) { scanf("%d%d%d",&t[i],&a[i],&b[i]); f[a[i]]=max(t[i],f[a[i]]); ++sum[b[i]]; } for (int i=2;i<=n;i++) sum[i]=sum[i]+sum[i-1]; Time[1]=0; for (int i=2;i<=n;i++) Time[i]=max(Time[i-1],f[i-1])+d[i-1]; ans=0; for (int i=1;i<=m;i++) ans=ans+Time[b[i]]-t[i]; while (k) { g[n-1]=n; for (int i=n-2;i>=1;i--) if (f[i+1]>=Time[i+1]) g[i]=i+1;else g[i]=g[i+1]; int mx=0,u=0; for (int i=1;i<=n;i++) if (sum[g[i]]-sum[i]>mx&&d[i]>0) mx=sum[g[i]]-sum[i],u=i; if (!u) break; d[u]--;k--;ans=ans-mx; Time[1]=0; for (int i=2;i<=n;i++) Time[i]=max(Time[i-1],f[i-1])+d[i-1]; } printf("%d",ans); return 0; }
相关文章推荐
- 洛谷P1315 [NOIP2011提高组Day2T3] 观光公交
- NOIP2011复赛提高组day2(A:计算系数 B:聪明的质监员 C:观光公交)
- NOIP 2011 提高组 复赛 day2 bus 观光公交
- [NOIP2011] 提高组 洛谷P1315 观光公交
- 【NOIP2011提高组T6】观光公交-贪心
- [NOIP2011提高组day2]-3-观光公交
- noip2011观光公交贪心详解
- 【NOIP2011 Day 2】观光公交
- NOIP2011观光公交
- 【noip2011】【观光公交】
- Luogu 1315 【NOIP2011】观光公交 (贪心)
- NOIP2011 观光公交
- noip2011-观光公交
- 【NOIP2011 day2】观光公交
- [NOIP 2011] 观光公交
- noip2011 观光公交 (贪心)
- noip2011 公交观光
- NOIP2011 观光公交(贪心)
- NOIP2011 观光公交 题解(超详细)
- [Noip2011]观光公交