Juice Extractor |
Jerry loses himself in the interesting game: Fruit Ninja. Fruit Ninja is a game of iPhone and iPad in which the players cut the fruits coming from the bottom of the screen and gain the bonus from cutting more than two fruits with a single slice. Once a fruit is cut, it breaks into small pieces and cannot be cut any more.
After months of training, he becomes pro of this game. Actually, he can cut all the fruits on the screen at any time. Jerry also has a bad habit that he has no willing to leave some fruits for the future cutting. In the other words, after Jerry cuts the fruits, all the fruits on the screen breaks and no one left. That is why all his friends call him `Juice Extractor'.
Now he only consider about the bonus, when he cuts more than two fruits, he can gain some bonus scores as same as the number of fruits he slice at that time. For example, if Jerry cuts 4 fruits with a single slice, he can get 4 scores from this slice.
After Jerry gets the fruit schedule, he knows the appearing time and the disappearing time for every single fruit. He can only cut a fruit into pieces between its appearing time and disappearing time inclusive. He wants to know the maximum possible bonus scores he can receive.
Input
There are several test cases; the first line of the input contains a single integer T, denoting the number of the test cases. (T200)
For each test case, the first line contains an integer N, denoting the total number of fruits. ( 1N1000)
The next N lines, each line describe a fruit. For each line, there are two integers Xi and Yi, where Xi is the appearing time of the fruit and Yi is the disappearing time of this fruit. ( 0XiYi1000000000)
Output
For each test case, output a single integer denoting the maximum scores that Jerry could possibly gain. See the sample for further details.
Sample Input
1 10 1 10 2 11 3 12 4 13 13 14 14 15 13 19 20 22 21 23 22 24
Sample Output
Case #1: 10
题意:
给出 T组样例,每个样例都有一个 N,代表有 N 个水果。后给出每个水果出现的开始时间和结束时间。在任意一个时间点切水果的话,能够切到所有在这个时间出现的所有水果,当切的水果数 > 2 的时候,才会有得分,得分为所切的水果数,小于等于2得分为0。问如何切,使其分数达到最大。
思路:
DP + 树状数组。dp [ i ] = max { dp [ t ] + point (t + 1, i) },dp [ i ] 代表在此刻切水果所达到的最大值,在 i 时刻这刀切的话,在 i 之前出现且尚未消失的水果都会被切除。
同理 dp [ t ] 代表的也是 t 时刻前的水果都会消失,那么在 (t + 1 , i )这段时间内出现且尚未消失的水果将会在 i 这刀切下去的时候消失,所以最后的得分应该是 dp [ t ] + point ( t + 1, i ) 。
预处理 dp 应该是只在该时刻切水果所得到的分数,用起点 + 1,(终点 + 1)-1,后 dp [ i ] += dp [ i - 1 ] 可以预处理出来。同时树状数组维护某段时间内的水果数。
AC:
#include <iostream> #include <cstdio> #include <cstring> #include <queue> #include <algorithm> using namespace std; const int MAX = 1005; typedef struct { int l, r; } node; node no[MAX]; int ans; int yy[MAX * 2]; int dp[MAX * 2]; int m; int bit[MAX * 5]; int sum (int x) { int s = 0; while (x > 0) { s += bit[x]; x -= x & -x; } return s; } void add (int i, int x) { while (i <= m) { bit[i] += x; i += i & -i; } } int main() { int t; scanf("%d", &t); for (int tt = 1; tt <= t; ++tt) { int n; scanf("%d", &n); ans = 0; for (int i = 1; i <= n; ++i) { scanf("%d%d", &no[i].l, &no[i].r); yy[ans++] = no[i].l; yy[ans++] = no[i].r; } sort(yy, yy + ans); ans = unique(yy, yy + ans) - yy; m = ans * 5; memset(bit, 0, sizeof(bit)); for (int i = 1; i <= n; ++i) { int s = lower_bound(yy, yy + ans, no[i].l) - yy; add(s + 1, 1); } memset(dp, 0, sizeof(dp)); for (int i = 1; i <= n; ++i) { int s = lower_bound(yy, yy + ans, no[i].l) - yy; int e = lower_bound(yy, yy + ans, no[i].r) - yy; dp[s + 1] += 1; dp[e + 2] += -1; } for (int i = 1; i <= ans; ++i) dp[i] += dp[i - 1]; for (int i = 1; i <= ans; ++i) { dp[i] = dp[i] > 2 ? dp[i] : 0; } for (int i = 1; i <= ans; ++i) { for (int j = 1; j < i; ++j) { int ans = sum(i) - sum(j); dp[i] = max(dp[i], dp[j] + (ans > 2 ? ans : 0)); } for (int j = 1; j <= n; ++j) { int s = lower_bound(yy, yy + ans, no[j].r) - yy; if (s + 1 == i) { int e = lower_bound(yy, yy + ans, no[j].l) - yy; add(e + 1, -1); } } } printf("Case #%d: ", tt); printf("%d\n", dp[ans]); } return 0; }
相关推荐
病人跟踪治疗信息管理系统采用B/S模式,促进了病人跟踪治疗信息管理系统的安全、快捷、高效的发展。传统的管理模式还处于手工处理阶段,管理效率极低,随着病人的不断增多,传统基于手工管理模式已经无法满足当前病人需求,随着信息化时代的到来,使得病人跟踪治疗信息管理系统的开发成了必然。 本网站系统使用动态网页开发SSM框架,Java作为系统的开发语言,MySQL作为后台数据库。设计开发了具有管理员;首页、个人中心、病人管理、病例采集管理、预约管理、医生管理、上传核酸检测报告管理、上传行动轨迹管理、分类管理、病人治疗状况管理、留言板管理、系统管理,病人;首页、个人中心、病例采集管理、预约管理、医生管理、上传核酸检测报告管理、上传行动轨迹管理、病人治疗状况管理,前台首页;首页、医生、医疗资讯、留言反馈、个人中心、后台管理、在线咨询等功能的病人跟踪治疗信息管理系统。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。
liunx project 5
分享课程——PostgreSQL DBA实战视频教程(完整10门课程合集)
计算机科学基础期末考试试题
练习与巩固《C语言程序设计》理论知识,通过实践检验和提高实际能力,进一步培养自己综合分析问题和解决问题的能力。掌握运用C语言独立地编写调试应用程序和进行其它相关设计的技能。
1. 数据集资源 公开低光照数据集:用于模型训练的低光照图像数据集,这些数据集包含了多种低光照条件下的图像,并附有增强后的高质量图像。 合成数据:在不足数据的情况下,可以通过对高亮度图像进行暗化处理生成低光图像对,以增强数据量。 自建数据集:对于特定场景,如安防、医疗等,可以拍摄或收集特定条件下的低光照图像来创建数据集,满足特定应用需求。 2. 硬件资源 GPU:大规模模型训练需要高性能计算,以支持大规模图像处理和神经网络训练。 数据存储:由于图像数据较大,需要大容量的存储设备如HDD或SSD来存储数据集及中间结果。 3. 深度学习框架及工具 PyTorch:支持构建和训练神经网络模型,尤其适合卷积神经网络(CNN)和生成对抗网络(GAN)的实现。 CUDA和cuDNN:为GPU加速库,在模型训练时可显著提升运行效率。
双哥微服务
fb000f5e-12c5-a46b-102a-f08bdfa015f1.json
ASP.NET跑腿服务网站源码 开发环境 :Asp.net + VS2010 + C# + ACCESS 网站介绍: 适合人群:跑腿服务行业公司,服务资讯公司或者其他行业企业、 做服务行业建站的技术人员、技术人员学习参考都行。 技术特点:非常清爽大气的网站,界面华丽,工整,采用全div布局, 含flash图片切换功能,强大的后台信息管理功能。 功能介绍: 后台功能:系统参数设置(网站标题,关键字,内容,站长联系方式等)、系统栏目频道设置、新闻管 理、服务项目管理、公司介绍内容管、系统模版管理(可管理前台页面模版内容,具体到头部页面,底 部页面,首页,内容页,新网页等)、系统日志管理、系统管理员管理、频道管理(频道类型、频道内 容、内容发布以及编辑)。 后台地址:网址/admin/login.aspx 账户:admin 密码:admin888
c语言
环境说明: 开发语言:Java/php JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea 小程序框架:uniapp/原生小程序 开发工具:HBuilder X/微信开发者
人工智能(Artificial Intelligence,缩写为AI)是一种通过计算机程序模拟人类智能与行为的技术和理论。它可以用于各种领域,例如:自动驾驶、机器翻译、语音识别、图像识别、医疗诊断等。近年来,人工智能逐渐成为了技术界和商业领域的热门话题。
c语言
基于JAVA实现的离散数学题库管理系统
Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
# 基于C++的MiniSQL数据库系统 ## 项目简介 MiniSQL是一个轻量级的关系型数据库管理系统,旨在提供基本的SQL解析和执行功能。该项目参考了CMU15445 BusTub框架,并在其基础上进行了修改和扩展,以兼容原MiniSQL实验指导的要求。MiniSQL支持缓冲池管理、索引管理、记录管理等核心功能,并提供了简单的交互式SQL解析和执行引擎。 ## 项目的主要特性和功能 1. 缓冲池管理实现了一个高效的缓冲池管理器,用于缓存磁盘上的数据页,以提高数据访问速度。 2. 索引管理支持B+树索引,提供高效的插入、删除和查找操作。 3. 记录管理实现了记录的插入、删除、更新和查询功能,支持持久化存储。 4. 元数据管理提供了表和索引的元数据管理功能,支持持久化存储和检索。 5. 并发控制实现了基本的锁管理器,支持事务的并发控制。 6. 查询执行提供了简单的查询执行引擎,支持基本的SQL语句解析和执行。 ## 安装使用步骤
社会科学研究Top 10,000 Papers数据解析被引次数下载次数等 一、数据背景与来源 该数据集来源于SSRN(Social Science Research Network)的社会科学研究Top 10,000 Papers,是根据多种学术影响力指标统计得出的,在其平台上最受关注的前10,000篇学术论文的汇总。这些数据反映了国际研究领域的热点话题和发展趋势,对于国内学者研究者来说,是了解社科领域研究进展的重要窗口。 二、数据内容概览 样本数量:数据集包含10,000条记录,每条记录代表一篇在SSRN平台上具有高影响力的学术论文。 论文范围:涵盖社会科学研究的各个领域,包括但不限于经济学、政治学、社会学、心理学、教育学等。 关键指标: 数据下载次数:反映了论文的受欢迎程度和研究者对其内容的关注度。 引用次数:体现了论文在学术界的认可度和影响力,是评估论文质量的重要指标之一。 Rank Paper Total New Downloads Total # of Downloads Total # of Citations # of Authors
行业研究报告、行业调查报告、研报
【作品名称】:基于 Java+Mysql 实现的企业人事管理系统【课程设计/毕业设计】(源码+设计报告) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: [1]管理员可以对员工的基本信息的增删改查,普通员工仅可查看; [2]对公司里所有员工进行分配工号,并进行基本信息的录入; [3]对新聘用的员工,将其信息加入到员工档案记录中; [4]对于解聘的员工,将其信息从员工档案记录中删除。 [5]当员工信息发生变动时,修改员工档案记录中相应的属性。 (三)员工岗位信息管理 [1]对公司里所有员工的职务及岗位信息(岗位职责)进行记录; [2]记录员工调动前后的具体职务,以及调动时间。 (四)考勤管理 [1]对员工上班刷卡的记录进行统一编号;登记员工上班时间(准时、迟到)。 [2]对员工下班刷卡的记录进行统一编号;登记员工下班时间(准时、早 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。需要有一定的基础看懂代码,自行调试代码并解决报错,能自行添加功能修改代码。
# 基于Arduino编程的冰箱警报系统 ## 项目简介 这是一个基于Arduino编程的项目,通过连接到冰箱门开关的警报系统来提醒用户冰箱门开启时间过长。用户可以在设定的时间内关闭冰箱门,否则警报会响起。项目使用LCD控制器面板来设置和配置警报延迟时间。 ## 项目的主要特性和功能 1. 警报功能在冰箱门开启后,系统会开始计时,如果用户在设定的时间内未关闭冰箱门,警报会响起。 2. LCD配置面板使用LCD控制器面板设置和配置警报延迟时间。 3. 可配置警报时间用户可以根据需要调整警报延迟时间。 4. 状态显示LCD面板显示冰箱门的状态(开启关闭)。 ## 安装使用步骤 1. 下载并解压项目文件。 2. 准备硬件部件根据提供的物料清单(Bill of Materials)准备所需的硬件部件。 3. 连接硬件部件按照项目文档中的连接表(Connection Table)将硬件部件连接到Arduino主板和LCD控制器面板。