首页 > 代码库 > vijos 1741 观光公交
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 观光公交
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。