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

noip2011——提高组——观光公交

时间:2017-05-14 12:27:47      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:else   UI   ret   read   最优   更新   string   amp   algorithm   

这题主要思想就是贪心了。

每次找出最优加速点,更新时间,就可以了。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int read(){
    int t=1,num=0;
    char c=getchar();
    while(c>9||c<0){if(c==-)t=-1;c=getchar();}
    while(c>=0&&c<=9){num=num*10+c-0;c=getchar();}
    return num*t;
}
const int mn=1010,mm=10010;
int n,m,k,a,b,t,ans=0;
int d[mn],last[mm]={0},arr[mn]={0},down[mn]={0},f[mn]={0};
int main()
{
    n=read();m=read();k=read();
    for(int i=1;i<n;i++)d[i]=read();
    for(int i=1;i<=m;i++){
        t=read();a=read();b=read();
        last[a]=max(last[a],t);
        down[b]++;ans-=t;
    }
    for(int i=1;i<=n;i++)arr[i]=max(last[i-1],arr[i-1])+d[i-1];
    while(k--){
        for(int i=n;i>=2;i--){
            if(!d[i-1])f[i-1]=0;
            else{f[i-1]=down[i];if(arr[i]>last[i])f[i-1]+=f[i];}
        }
        int zui=0,wz=0;
        for(int i=1;i<n;i++)if(f[i]>zui)zui=f[i],wz=i;
        if(!zui)break;
        d[wz]--;
        for(int i=wz+1;i<=n;i++)arr[i]=max(arr[i-1],last[i-1])+d[i-1];
    }
    for(int i=1;i<=n;i++)ans+=arr[i]*down[i];
    printf("%d\n",ans);
    return 0;
}

本文由Yzyet编写,网址为www.cnblogs.com/Yzyet。非Yzyet同意,禁止转载,侵权者必究。

noip2011——提高组——观光公交

标签:else   UI   ret   read   最优   更新   string   amp   algorithm   

原文地址:http://www.cnblogs.com/Yzyet/p/6851915.html

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