zoukankan      html  css  js  c++  java
  • 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
    ",ans);
        return 0;
    }
  • 相关阅读:
    hiho150周
    hdu1011
    hiho1055/hdu1561
    bat脚本启动exe并打开文件后退出 + 中文乱码
    hiho1080
    hiho1079
    java异常处理——基础篇
    找不到要编译的文件——path环境变量配置
    MVC——studying
    轻松搞定EasyUI
  • 原文地址:https://www.cnblogs.com/ziliuziliu/p/6063764.html
Copyright © 2011-2022 走看看