dalao们都在哪里

P1983 [NOIP2013 普及组] 车站分级

蒻得不行 @ 2019-01-29 19:25:19

老师给我们介绍了一个蜜汁思路

70分求解

// luogu-judger-enable-o2
#include<bits/stdc++.h>
using namespace std;
int a[1001],p[1001],n,m,s,x,y,i,j,maxx,minn;
//a为离线做法的输入表\
p为模拟时各车站的等级 
int main(){
    //freopen(".txt","r",stdin);
    scanf("%d%d",&n,&m);
    while(m--){
        maxx=0;minn=1<<30;
        scanf("%d",&s);
        for(i=0;i<s;i++){
            scanf("%d",&a[i]);
            maxx=max(maxx,p[a[i]]);//临时停靠站的最大值 
        }
        for(i=1;i<s;i++) for(j=a[i-1]+1;j<a[i];j++)
            minn=min(minn,p[j]);//非临时停靠站的最小值 
        maxx-=minn-1;//因为非临时停靠站等级必须大于零时停靠站,所以-1 
        if(maxx<=0) continue;//临时停靠站与非临时停靠站相差一或更大,不矛盾,跳出 
        for(i=1;i<s;i++) for(j=a[i-1]+1;j<a[i];j++)
            p[j]+=maxx;//将所有非临时停靠站的等级置于临时停靠站的等级之上 
    }
    maxx=0;minn=1<<30;
    for(i=1;i<=n;i++){
        maxx=max(maxx,p[i]);
        minn=min(minn,p[i]);
    }
    printf("%d",maxx+1);//因为等级下标为0,所以+1
    return 0;
}

by 蒻得不行 @ 2019-01-29 19:33:17

没错这是模拟


|