vijos 1741 观光公交
Posted ziliuziliu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vijos 1741 观光公交相关的知识,希望对你有一定的参考价值。
TMD这种题有什么意思啊。。。敲着都烦啊。。。感觉啥都没有用就敲完了。。。光考个贪心有什么意思啊。
反正不想写。NOIP遇到了。。。管他呢。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 1050 #define maxm 10050 using namespace std; int n,m,k,t[maxm],a[maxm],b[maxm],d[maxn],mx[maxn],arr[maxn],sum[maxn],nxt[maxn],ans=0; int main() { scanf("%d%d%d",&n,&m,&k); for (int i=2;i<=n;i++) scanf("%d",&d[i]); for (int i=1;i<=m;i++) { scanf("%d%d%d",&t[i],&a[i],&b[i]); mx[a[i]]=max(mx[a[i]],t[i]);sum[b[i]]++; } for (int i=1;i<=n;i++) sum[i]+=sum[i-1]; while (k) { for (int i=1;i<n;i++) arr[i+1]=max(arr[i],mx[i])+d[i+1]; nxt[n-1]=n; for (int i=n-2;i>=1;i--) { if (mx[i+1]>=arr[i+1]) nxt[i]=i+1; else nxt[i]=nxt[i+1]; } int ret=0,pos; for (int i=1;i<=n-1;i++) { if ((ret<sum[nxt[i]]-sum[i]) && (d[i+1])) { ret=sum[nxt[i]]-sum[i]; pos=i+1; } } if (!ret) break; d[pos]--;k--; } for (int i=1;i<n;i++) arr[i+1]=max(arr[i],mx[i])+d[i+1]; for (int i=1;i<=m;i++) ans+=arr[b[i]]-t[i]; printf("%d\n",ans); return 0; }
以上是关于vijos 1741 观光公交的主要内容,如果未能解决你的问题,请参考以下文章