2436: [Noi2011]Noi嘉年华

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 529  Solved: 382
[Submit][Status][Discuss]

Description

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

现在嘉年华活动的组织者小安一共收到了 n个活动的举办申请,其中第 i 个活动的起始时间为 Si,活动的持续时间为Ti。这些活动都可以安排到任意一个嘉年华的会场,也可以不安排。 
小安通过广泛的调查发现,如果某个时刻,两个嘉年华会场同时有活动在进行(不包括活动的开始瞬间和结束瞬间),那么有的选手就会纠结于到底去哪个会场,从而变得不开心。所以,为了避免这样不开心的事情发生,小安要求不能有两个活动在两个会场同时进行(同一会场内的活动可以任意进行)。 
另外,可以想象,如果某一个嘉年华会场的活动太少,那么这个嘉年华的吸引力就会不足,容易导致场面冷清。所以小安希望通过合理的安排,使得活动相对较少的嘉年华的活动数量最大。 
此外,有一些活动非常有意义,小安希望能举办,他希望知道,如果第i 个活动必须举办(可以安排在两场嘉年华中的任何一个),活动相对较少的嘉年华的活动数量的最大值。

Input

输入的第一行包含一个整数 n,表示申请的活动个数。 
接下来 n 行描述所有活动,其中第 i 行包含两个整数 Si、Ti,表示第 i 个活动从时刻Si开始,持续 Ti的时间。

Output

输出的第一行包含一个整数,表示在没有任何限制的情况下,活动较少的嘉年华的活动数的最大值。 
接下来 n 行每行一个整数,其中第 i 行的整数表示在必须选择第 i 个活动的前提下,活动较少的嘉年华的活动数的最大值。

Sample Input

5
8 2
1 5
5 3
3 2
5 3

Sample Output

2
2
1
2
2
2

HINT

在没有任何限制的情况下,最优安排可以在一个嘉年华安排活动 1, 4,而在另一个嘉年华安排活动 3, 5,活动2不安排。

1≤n≤200 0≤Si≤10^9
1≤Ti≤ 10^9

Source

Day2

Solution

一道比较好的DP

首先直接DP是不能得到答案的,所以一步步考虑

先将节目起始时间和终止时间离散化

$num[i][j]$表示从时间$i~j$的节目有多少个,这个特别好求,$O(N^{2})$/$O(N^{3})$都是可以的

$pre[i][j]$表示:截至在时间$i$之前,给一个场地$j$个节目,另一个场地最多有多少节目

$suf[i][j]$表示:截至在时间$i$之后,给一个场地$j$个节目,另一个场地最多有多少节目

$pre[i][j]$,$suf[i][j]$显然是可以DP的,

$pre[i][j]=max(pre[i][j+1],pre[k][j]+num[k][i],pre[k][j-num[k][i])$,$suf[i][j]$求法相同,倒着DP

那么第一问的答案,显然就是$max \left\{ min(pre[end][i],i) \right\} $

那么考虑第二问,要求每个活动必须举办时的情况

那么需要再进行一遍DP,

$dp[i][j]=max(min(x+y+num[i][j],pre[i][x]+suf[j][y])$

直接枚举$x$,$y$进行DP是$O(N^{4})$,显然不行。

但我们发现,x一定时,y是单峰的,当x增大时,y是减少的,所以只需要枚举x即可,y不断减小

这样总的复杂度就是$O(N^3)$

Code

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
using namespace std;
int read()
{
int x=,f=; char ch=getchar();
while (ch<'' || ch>'') {if (ch=='-') f=-; ch=getchar();}
while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
return x*f;
}
#define MAXN 500
int N,S[MAXN],T[MAXN],num[MAXN][MAXN],pre[MAXN][MAXN],suf[MAXN][MAXN];
int dp[MAXN][MAXN];
int ls[MAXN<<],tp,top;
void Prework()
{
for (int i=; i<=top; i++)
for (int j=; j<=top; j++)
for (int k=; k<=N; k++)
if (S[k]>=i && T[k]<=j)
num[i][j]++;
for (int i=; i<=top; i++)
for (int j=; j<=N+; j++) pre[i][j]=suf[i][j]=-0x7fffffff;
for (int i=; i<=top; i++)
for (int j=num[][i]; j>=; j--)
{
pre[i][j]=pre[i][j+];
for (int k=; k<=i-; k++)
{
pre[i][j]=max(pre[i][j],pre[k][j]+num[k][i]);
if (j>=num[k][i])
pre[i][j]=max(pre[i][j],pre[k][j-num[k][i]]);
}
}
for (int i=top; i; i--)
for (int j=num[i][top]; j>=; j--)
{
suf[i][j]=suf[i][j+];
for (int k=i+; k<=top+; k++)
{
suf[i][j]=max(suf[i][j],suf[k][j]+num[i][k]);
if (j>=num[i][k])
suf[i][j]=max(suf[i][j],suf[k][j-num[i][k]]);
}
}
}
void DP()
{
for (int i=; i<=top; i++)
for (int j=i+; j<=top; j++)
{
int t=num[j][top],k;
for (k=; k<=num[][i]; k++)
{
while (t)
if (min(k+t+num[i][j],pre[i][k]+suf[j][t])<=min(k+t-+num[i][j],pre[i][k]+suf[j][t-]))
t--;
else break;
dp[i][j]=max(dp[i][j],min(k+t+num[i][j],pre[i][k]+suf[j][t]));
}
}
}
int ans,Ans[MAXN];
int main()
{
N=read();
for (int i=; i<=N; i++)
ls[++tp]=S[i]=read(),ls[++tp]=T[i]=S[i]+read();
stable_sort(ls+,ls+tp+);
top=unique(ls+,ls+tp+)-ls-;
for (int i=; i<=N; i++)
S[i]=lower_bound(ls+,ls+top+,S[i])-ls,T[i]=lower_bound(ls+,ls+top+,T[i])-ls;
Prework();
for (int i=; i<=N; i++)
ans=max(min(pre[top][i],i),ans);
DP();
for (int i=; i<=N; i++)
for (int j=S[i]; j; j--)
for (int k=T[i]; k<=top; k++)
Ans[i]=max(Ans[i],dp[j][k]);
printf("%d\n",ans);
for (int i=; i<=N; i++)
printf("%d\n",Ans[i]);
return ;
}

有点厉害.....

【BZOJ-2436】嘉年华 DP + 优化的更多相关文章

  1. bzoj 3851: 2048 dp优化

    3851: 2048 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 22  Solved: 9[Submit][Status] Description T ...

  2. 【学习笔记】动态规划—各种 DP 优化

    [学习笔记]动态规划-各种 DP 优化 [大前言] 个人认为贪心,\(dp\) 是最难的,每次遇到题完全不知道该怎么办,看了题解后又瞬间恍然大悟(TAT).这篇文章也是花了我差不多一个月时间才全部完成 ...

  3. [总结]一些 DP 优化方法

    目录 注意本文未完结 写在前面 矩阵快速幂优化 前缀和优化 two-pointer 优化 决策单调性对一类 1D/1D DP 的优化 \(w(i,j)\) 只含 \(i\) 和 \(j\) 的项--单 ...

  4. DP 优化方法合集

    0. 前言 写完这篇文章后发现自己对于 DP 的优化一窍不通,所以补了补 DP 的一些优化,写篇 blog 总结一下. 1. 单调队列/单调栈优化 1.2 算法介绍 这应该算是最基础的 DP 优化方法 ...

  5. NOIP2015 子串 (DP+优化)

    子串 (substring.cpp/c/pas) [问题描述] 有两个仅包含小写英文字母的字符串 A 和 B.现在要从字符串 A 中取出 k 个 互不重 叠 的非空子串,然后把这 k 个子串按照其在字 ...

  6. LCIS tyvj1071 DP优化

    思路: f[i][j]表示n1串第i个与n2串第j个且以j结尾的LCIS长度. 很好想的一个DP. 然后难点是优化.这道题也算是用到了DP优化的一个经典类型吧. 可以这样说,这类DP优化的起因是发现重 ...

  7. 取数字(dp优化)

    取数字(dp优化) 给定n个整数\(a_i\),你需要从中选取若干个数,使得它们的和是m的倍数.问有多少种方案.有多个询问,每次询问一个的m对应的答案. \(1\le n\le 200000,1\le ...

  8. dp优化1——sgq(单调队列)

    该文是对dp的提高(并非是dp入门,dp入门者请先参考其他文章) 有时候dp的复杂度也有点大...会被卡. 这几次blog大多数会讲dp优化. 回归noip2017PJT4.(题目可以自己去百度).就 ...

  9. loj6171/bzoj4899 记忆的轮廊(期望dp+优化)

    题目: https://loj.ac/problem/6171 分析: 设dp[i][j]表示从第i个点出发(正确节点),还可以有j个存档点(在i点使用一个存档机会),走到终点n的期望步数 那么 a[ ...

随机推荐

  1. PHP程序设计

    ① 在设计评论系统时,关于文章的一些属性,我们最好存放在一个内存缓存中,通过下面的设计每次仅需要查询一次即可获取文章的所有属性 class CommentsDoc{ private static $d ...

  2. ATI显卡添加自定义分辨率

    run regedit, 浏览到这个键目录下 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video 先导出一个作为备份. 查找 DALNo ...

  3. (原创)mybaits学习三,springMVC和mybatis融合

    上一节,总计了spring和mybaits的融合,这一节,我们来学习springmvc和mybatis融合 最近在弄一个SSM的项目,然后在网上找资料,将资料总结如下 一,开发环境的配置 MyEcli ...

  4. React Native开发技术周报1

    (一).资讯 1.React Native 0.21版本发布,最新版本功能特点,修复的Bug可以看一下已翻译 重要:如果升级 Android 项目到这个版本一定要读! 我们简化了 Android 应用 ...

  5. 用canvas画简单的“我的世界”人物头像

    前言:花了4天半终于看完了<Head First HTML5>,这本书的学习给我最大的感受就是,自己知识的浅薄,还有非常多非常棒的技术在等着我呢.[熊本表情]扶朕起来,朕还能学! H5新增 ...

  6. 虚拟机开机提示Operating System not found解决办法

    为了更好体验windows更多操作系统,有些用户会在VMware虚拟机中安装XP.win7或win8等等系统,有用户反映在虚拟机中安装XP开机后提示"Operating System not ...

  7. Bootstrap系列 -- 12. 水平表单

    Bootstrap框架默认的表单是垂直显示风格,但很多时候我们需要的水平表单风格(标签居左,表单控件居右) 在Bootstrap框架中要实现水平表单效果,必须满足以下两个条件: 1.在<form ...

  8. 吉特仓库管理系统-.SQL Server 2012 升级企业版

    随着业务数据的不断增大,单表的数量已经上亿,查询的数据越来越慢,所以考虑到将数据库表分区,同时也将数据库升级到SQL Server 2012. 当时没有考虑更多,在服务器上安装了 SQL Server ...

  9. sql server 字符串函数str()

    语法: STR(nExpres[,nLength[,nDecimalPlaces]]) 参数: nExpression------STR要计算的数值表达式. nLength------------ST ...

  10. LLC 逻辑链路控制

    LLC  协  议 4.2.1 LLC帧格式 LLC协议定义了LLC层之间通信的帧格式,参见图4.3. 图4.3  LLC帧格式 LLC帧格式中各个字段的含义如下: ① 服务访问点(SAP)地址:SA ...