码迷,mamicode.com
首页 > 其他好文 > 详细

vijos 1741 观光公交

时间:2016-11-15 00:17:48      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:span   贪心   name   efi   ios   scanf   sum   while   string   

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 观光公交

标签:span   贪心   name   efi   ios   scanf   sum   while   string   

原文地址:http://www.cnblogs.com/ziliuziliu/p/6063764.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!