当前位置: 首页 > news >正文

《P1973 [NOI2011] NOI 嘉年华》

题目描述

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

现在嘉年华活动的组织者小安一共收到了 n 个活动的举办申请,其中第 i 个活动的起始时间为 Si​,活动的持续时间为 Ti​。这些活动都可以安排到任意一个嘉年华的会场,也可以不安排。

小安通过广泛的调查发现,如果某个时刻,两个嘉年华会场同时有活动在进行(不包括活动的开始瞬间和结束瞬间),那么有的选手就会纠结于到底去哪个会场,从而变得不开心。所以,为了避免这样不开心的事情发生,小安要求不能有两个活动在两个会场同时进行(同一会场内的活动可以任意进行)。

另外,可以想象,如果某一个嘉年华会场的活动太少,那么这个嘉年华的吸引力就会不足,容易导致场面冷清。所以小安希望通过合理的安排,使得活动相对较少的嘉年华的活动数量最大。

此外,有一些活动非常有意义,小安希望能举办,他希望知道,如果第 i 个活动必须举办(可以安排在两场嘉年华中的任何一个),活动相对较少的嘉年华的活动数量的最大值。

输入格式

输入的第一行包含一个整数 n,表示申请的活动个数。

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

输出格式

输出的第一行包含一个整数,表示在没有任何限制的情况下,活动较少的嘉年华的活动数的最大值。

接下来 n 行每行一个整数,其中第 i 行的整数表示在必须选择第 i 个活动的前提下,活动较少的嘉年华的活动数的最大值。

输入输出样例

输入 #1复制

5 8 2 1 5 5 3 3 2 5 3

输出 #1复制

2 2 1 2 2 2

说明/提示

样例解释

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

对于 10% 的数据,1≤n≤10。

对于 30% 的数据,1≤n≤40。

对于 100% 的数据,1≤n≤200,0≤Si​≤109,1≤Ti​≤109。

如果输出格式不正确(比如输出不足 n+1 行),得 0 分;

如果输出文件第一行不正确,而且后 n 行至少有一行不正确,得 0 分;

如果输出文件第一行正确,但后 n 行至少有一行不正确,得 4 分;

如果输出文件第一行不正确,但后 n 行均正确,得 6 分;

如果输出文件中的 n+1 行均正确,得 10 分。

代码实现:

#include<bits/stdc++.h> #define db double using namespace std; #define mkp(x,y) (make_pair(x,y)) const int MAXN = 500; map<pair<db, db>, int> mp; vector<db> vec; int n, m; struct nd { db s, t; bool operator<(const nd &x)const { return s + t < x.s + x.t; } } a[MAXN]; int pre[MAXN][MAXN], suf[MAXN][MAXN], f[MAXN][MAXN], cnt[MAXN][MAXN]; int L[MAXN], R[MAXN]; inline int getid(db x) { return lower_bound(vec.begin(), vec.end(), x) - vec.begin() + 1; } inline void init() { sort(vec.begin(), vec.end()); vec.erase(unique(vec.begin(), vec.end()), vec.end()); for(int i = 1; i <= n; ++i) { L[i] = getid(a[i].s); R[i] = getid(a[i].t); } m = vec.size(); return; } inline void init2() { for(int i = 1; i <= m; ++i) { for(int j = 1; j <= n; ++j) { pre[i][j] = suf[i][j] = -0x3f3f3f3f; } } for(int i = 1; i <= m; ++i) { for(int j = 0; j <= n; ++j) { for(int k = 1; k < i; ++k) { pre[i][j] = max(pre[i][j], cnt[k][i] + pre[k][j]); if(j >= cnt[k][i]) { pre[i][j] = max(pre[i][j], pre[k][j - cnt[k][i]]); } } } } for(int i = m; i >= 1; ++i) { for(int j = 0; j <= n; ++j) { for(int k = i + 1; k <= m; ++k) { suf[i][j] = max(suf[i][j], cnt[i][k] + suf[k][j]); if(j >= cnt[i][k]) { suf[i][j] = max(suf[i][j], suf[k][j - cnt[i][k]]); } } } } return ; } int main() { scanf("%d", &n); for(int i = 1; i <= n; ++i) { scanf("%lf%lf", &a[i].s, &a[i].t); a[i].t = a[i].s + a[i].t; if(mp.find(mkp(a[i].s, a[i].t)) != mp.end()) a[i].t = a[i].t - mp[mkp(a[i].s, a[i].t)] * 0.001; mp[mkp(a[i].s, a[i].t)]++; vec.push_back(a[i].s); vec.push_back(a[i].t); } init(); for(int i = 1; i <= m; ++i) { for(int j = i + 1; j <= m; ++j) { for(int k = 1; k <= n; ++k) { if(L[k] >= i && R[k] <= j) cnt[i][j]++; } } } init2(); for(int i = 1; i <= m; ++i) { for(int j = i + 1; j <= m; ++j) { int p0, p1; for(int y = n, x = 0; x <= n; ++x) { p0 = min(x + y + cnt[i][j], pre[i][x] + suf[j][y]); while(y && p0 <= (p1 = min(x + y - 1 + cnt[i][j], pre[i][x] + suf[j][y - 1]))) p0 = p1, --y; f[i][j] = max(f[i][j], min(x + y + cnt[i][j], pre[i][x] + suf[j][y])); } } } int ans = 0; for(int j = 1; j <= n; ++j) { ans = max(ans, min(pre[m][j], j)); } printf("%d\n", ans); for(int i = 1; i <= n; ++i) { ans = 0; for(int j = 1; j <= L[i]; ++j) { for(int k = R[i]; k <= m; ++k) { ans = max(ans, f[j][k]); } } printf("%d\n", ans); } return 0; }
http://www.jsqmd.com/news/412536/

相关文章:

  • 华为OD机考双机位C卷 - 几何平均值最大子数组 (Java Python JS GO C++ C)
  • 实现一个简单的文本摘要生成器。
  • pyTorch环境搭建及遇到的算力问题
  • 卷积神经网络(CNN)简介-卷积神经网络介绍
  • 【RCCL】RCCL工具
  • 大数据交易数据湖架构设计指南
  • 2026年2月25日
  • 什么是动态住宅 IP 代理?动态 IP 最常用在哪些业务
  • 搜索已死,问答永生:2026年6大特色GEO服务商实战图谱与避坑指南 - 品牌2025
  • LLM支持的AI Agent上下文感知推荐技术
  • langchain架构设计以及应用案例分享
  • AI获客新范式:2026年6大优质GEO服务商全景解析与实战指南 - 品牌2025
  • TypeScript学习
  • 工业AI的赛道有哪些主要玩家?全球竞争格局与未来趋势探讨
  • pycharm安装及环境配置
  • 整车制造计划排程排产系统的创新与实践
  • 工业超级智能体在整车制造如何实现生产优化与决策协同?
  • 告别盲目投放:2026年七大GEO服务商深度拆解与精准匹配 - 品牌2025
  • Rust学习笔记第2篇
  • 2026年负债人必看:如何合法高效解决信用卡债务问题? - 代码非世界
  • 网贷协商最佳解决方案,教你找到靠谱的债务协商服务商 - 代码非世界
  • 2026年贷款债务协商全攻略,2026年信用卡贷款债务协商,正确的解决方案到底是什么? - 代码非世界
  • 2026年信用卡/贷款逾期后,如何合法协商分期还款? - 代码非世界
  • 《白色相簿2》《歌を忘れた偶像》终章-雪菜线玩后感
  • docker 入门
  • docker 入门2
  • 深入解析 MobileNetV2:边缘AI场景中最常用的轻量化卷积神经网络
  • Perl 条件语句详解
  • docker 镜像备份
  • 创客匠人:2026知识付费“生死局”,AI智能体如何重构“交付”价值?