题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2436

题意:有一些活动,起始时间持续时间已知。有两个场地。每个活动最多只能在一个场地举行,且两个场地同一时间不能都举行活动。但是同一场地同一时间可以举行多个活动。要求的是两个场地中活动数目少的场地的活动数目的最大值S。再输出某个活动必须被安排时的S值。

思路:我直接粘贴原思路了。

区间离散化,设A={嘉年华1的活动}, B={嘉年华2的活动},C={未安排的活动}。
设num[i][j]为包含在区间[i,j]中的区间个数;
pre[i][j]为在区间[0,i]中放入j个区间到B后,最多能放入A的个数;
suf[i][j]为在区间[i, +∞)中放入j个区间到B后,最多能放入A的个数。

那么第一问答案为:max(min(i,suf[0][i]))。

int pre[N][N],suf[N][N],g[N][N],L[N],R[N];
int p[N],n,num[N][N],m;

void DP()
{
    int i,j,k;
    FOR0(i,N) FOR0(j,N) pre[i][j]=suf[i][j]=g[i][j]=-INF;
    pre[0][0]=suf[m-1][0]=0;
    FOR0(i,m)
    {
        for(j=0;j<=n;j++) if(pre[i][j]>=0)
        {
            upMax(pre[i][pre[i][j]],j);
        }
        for(j=n-1;j>=0;j--) upMax(pre[i][j],pre[i][j+1]);
        for(j=0;j<=n+1;j++) for(k=i+1;k<m;k++) if(pre[i][j]>=0)
        {
            upMax(pre[k][pre[i][j]],j+num[i][k]);
        }
    }
    for(i=m-1;i>=0;i--)
    {
        for(j=0;j<=n+1;j++) if(suf[i][j]>=0)
        {
            upMax(suf[i][suf[i][j]],j);
        }
        for(j=n-1;j>=0;j--) upMax(suf[i][j],suf[i][j+1]);
        for(j=0;j<=n;j++) for(k=i-1;k>=0;k--) if(suf[i][j]>=0)
        {
            upMax(suf[k][suf[i][j]],j+num[k][i]);
        }
    }
    int x,y;
    FOR0(i,m) FOR0(j,m)
    {
        y=n;
        for(x=0;x<=n;x++)
        {
            while(y>=0&&x+y>num[i][j]+pre[i][x]+suf[j][y]) y--;
            if(y>=0) upMax(g[i][j],x+y);
        }
    }
    int ans=0;
    for(i=0;i<=n;i++) upMax(ans,min(i,suf[0][i]));
    PR(ans);
    FOR0(i,n)
    {
        ans=0;
        for(j=0;j<=L[i];j++) for(k=R[i];k<m;k++)
        {
            upMax(ans,g[j][k]);
        }
        PR(ans);
    }
}

int main()
{
    RD(n);
    int i,j;
    FOR0(i,n)
    {
        RD(L[i],R[i]); R[i]=R[i]+L[i];
        p[m++]=L[i];
        p[m++]=R[i];
    }
    sort(p,p+m);
    m=unique(p,p+m)-p;
    FOR0(i,n)
    {
        L[i]=lower_bound(p,p+m,L[i])-p;
        R[i]=lower_bound(p,p+m,R[i])-p;
    }
    FOR0(i,m)
    {
        FOR0(j,n) if(L[j]>=i) num[i][R[j]]++;
        for(j=i+1;j<m;j++) num[i][j]+=num[i][j-1];
    }
    DP();
}

BZOJ 2436 Noi嘉年华(优化DP)的更多相关文章

  1. BZOJ 2436 NOI嘉年华(单调优化)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2436 题意:两个会场不能同时表演,但是同一个时间可以同时表演,要求让两个会场表演数量最小的最大,然后 ...

  2. BZOJ 3156: 防御准备 斜率优化DP

    3156: 防御准备 Description   Input 第一行为一个整数N表示战线的总长度. 第二行N个整数,第i个整数表示在位置i放置守卫塔的花费Ai. Output 共一个整数,表示最小的战 ...

  3. BZOJ2436 [Noi2011]Noi嘉年华 【dp】

    题目链接 BZOJ2436 题解 看这\(O(n^3)\)的数据范围,可以想到区间\(dp\) 发现同一个会场的活动可以重叠,所以暴力求出\(num[l][r]\)表示离散化后\([l,r]\)的完整 ...

  4. bzoj 3126 单调队列优化dp

    能转移的最左是其左边完整区间的最右左端点,最右是能覆盖它的最左左端点-1 #pragma GCC optimize ("O3") #include<cstdio> #i ...

  5. 【BZOJ 2436】 2436: [Noi2011]Noi嘉年华 (区间DP)

    2436: [Noi2011]Noi嘉年华 Description NOI2011 在吉林大学开始啦!为了迎接来自全国各地最优秀的信息学选手,吉林大学决定举办两场盛大的 NOI 嘉年华活动,分在两个不 ...

  6. 2436: [Noi2011]Noi嘉年华 - BZOJ

    Description NOI2011 在吉林大学开始啦!为了迎接来自全国各地最优秀的信息学选手,吉林大学决定举办两场盛大的 NOI 嘉年华活动,分在两个不同的地点举办.每个嘉年华可能包含很多个活动, ...

  7. bzoj 2436: [Noi2011]Noi嘉年华

    Description NOI2011 在吉林大学开始啦!为了迎接来自全国各地最优秀的信息学选手,吉林大学决定举办两场盛大的 NOI 嘉年华活动,分在两个不同的地点举办.每个嘉年华可能包含很多个活动, ...

  8. luogu P1973 [NOI2011]NOI 嘉年华 dp

    LINK:NOI 嘉年华 一道质量非常高的dp题目. 考虑如何求出第一问 容易想到dp. 按照左端点排序/右端点排序状态还是很难描述. 但是我们知道在时间上肯定是一次选一段 所以就可以直接利用时间点来 ...

  9. BZOJ 1499 [NOI2005] 瑰丽华尔兹 | 单调队列优化DP

    BZOJ 1499 瑰丽华尔兹 | 单调队列优化DP 题意 有一块\(n \times m\)的矩形地面,上面有一些障碍(用'#'表示),其余的是空地(用'.'表示).每时每刻,地面都会向某个方向倾斜 ...

随机推荐

  1. 夺命雷公狗ThinkPHP项目之----企业网站6之栏目的添加(主要用模型来验证字段)

    我们刚才的控制器已经写好了,那么我们现在就来完成我们的模型, 首先我们在Model目录下创建一个CategoryModel.class.php 代码如下: <?php namespace Adm ...

  2. SQL内连接与外连接的区别【转】

    --表stuid name 1, Jack2, Tom3, Kity4, nono--表examid grade1, 562, 7611, 89 内连接 (显示两表id匹配的)select stu.i ...

  3. SlidingMenu实现app侧滑功能

    很多APP都有侧滑菜单的功能,部分APP左右都是侧滑菜单~SlidingMenu 这个开源项目可以很好帮助我们实现侧滑功能,如果对SlidingMenu 还不是很了解的童鞋,可以参考下本篇博客. 本片 ...

  4. Oracle 10g dataguard broker 配置

    环境: OS:rhel6.3_64bit DB:Oracle10gR2 ————————————————————————dataguard broker配置—————————————————————— ...

  5. divcss5布局

    一.ie9不支持line-height字体垂直居中兼容问题    原因:CSS中使用了中文字体,而中文字体使用汉字.如:font-family:"微软雅黑"   1.将中文字体汉字 ...

  6. Mysql数据库知识-Mysql索引总结 mysql mysql数据库 mysql函数

    mysql数据库知识-Mysql索引总结: 索引(Index)是帮助MySQL高效获取数据的数据结构. 下边是自己整理的资料与自己的学习总结,,做一个汇总. 一.真的有必要使用索引吗? 不是每一个性能 ...

  7. Redis整合Spring结合使用缓存实例

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文介绍了如何在Spring中配置redis,并通过Spring中AOP的思想,将缓存的 ...

  8. BZOJ 1036:树的统计Count(树链剖分)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1036 题意:中文题意. 思路:也是普通的树链剖分.唯一注意的点是在change函数中 while(t ...

  9. Windows驱动开发(中间层)

    Windows驱动开发 一.前言 依据<Windows内核安全与驱动开发>及MSDN等网络质料进行学习开发. 二.初步环境 1.下载安装WDK7.1.0(WinDDK\7600.16385 ...

  10. oracle-odu小试牛刀--恢复drop表的数据

         现在进入oracle12c时代:普遍用的oracle版本为10g以上.在oracle10g之后提供了一个回收的机制.所以恢复drop表的数据以及表很容易.当然需要打开回收机制以及是归档模式. ...