Toyota Programming Contest 2023#3(AtCoder Beginner Contest 306) 6月17日比赛 第四题

news2024/11/19 23:21:21

  • 题目地址:D - Poisonous Full-Course

题目大意

时间限制:2秒,空间限制:1024MB,分值:400分

问题描述

小明来到了一家餐厅,一共有N道菜,第i道菜具有以下属性:

  • X_{i}= 0,则这道菜是无毒的,且吃了它会得到Y_{i}的美味值
  • X_{i}= 1,则这道菜是有毒的,但吃了它同样会得到Y_{i}的美味值

最初,小明的胃是健康的。当小明吃了一道菜后,他会:

  • 当他的胃是健康的
    • 若这道菜无毒,则他的胃依然健康
    • 若这道菜有毒,他就会得胃病
  • 当他得了胃病
    • 若这道菜无毒,则他的胃就会变得健康
    • 若这道菜有毒,他就会死

现在,小明面前将依次展示第1道菜,……,直到第N道菜展示完毕为止。对于每道菜,小明可以选择吃或者不吃。选择吃就可能会改变状态并增加(减少)美味值;若选择不吃,则状态与美味值都不会有变化。

现在,我们要让小明活着走出餐厅,请问小明能获得的最大美味值是多少?

数据规模

  • 每个值都是整数
  • 1\leq N\leq 3\times 10^{5}
  • X_{i}\in \left \{ 0,1\right \} (言外之意,x_{i}不是0就是1)
  • -10^9 \leq Y_i \leq 10^9

输入

输入来自标准输入,其格式如下:

N

X_1   Y_1

X_2   Y_2

X_N   Y_N

输出

输出一个整数,表示答案。


输入样例1

5
1 100
1 300
0 -200
1 500
1 300

输出样例1

600

样例解释:

以下选择使小明获得了最大的美味值(即600)且未死亡:

  •  他选择跳过第一道菜,现在他的胃是健康的,共获得了0美味值;
  •  他选择享用第二道菜,现在他的胃不是健康的,共获得了300美味值;
  •  他选择享用第三道菜,现在他的胃是健康的,共获得了100美味值;
  •  他选择享用第四道菜,现在他的胃不是健康的,共获得了600美味值;
  •  他选择跳过第五道菜,现在他的胃不是健康的;
  • 最终他获得了600美味值并活着走出了餐厅。

输入样例2

4
0 -1
1 -2
0 -3
1 -4

输出样例2

0

在这组样例中,他能获得的最大美味值为0。

输入样例3

15
1 900000000
0 600000000
1 -300000000
0 -700000000
1 200000000
1 300000000
0 -600000000
1 -900000000
1 600000000
1 -100000000
1 -400000000
0 900000000
0 200000000
1 -500000000
1 900000000

输出样例3

4100000000

答案不一定是32位整数。


这道题,明显是一个dp。

如果我们定义dp[i][0]表示吃完前i个菜之后胃依然健康,获得的最大美味值;dp[i][1]表示吃完前i个菜之后得了胃病,获得的最大美味值。那么:

dp[i][0]有四种情况:0,dp[i-1][0]+y[i],dp[i-1][1]+y[i](前提:x[i]==0),dp[i-1][0]

dp[i][1]只有三种情况:0,dp[i-1][0]+y(前提:x[i]==1),dp[i-1][1]

到最后,能获得的最大美味值就是max(dp[n][0],dp[n][1])。

#include <iostream>
using namespace std;
typedef long long int ll;
ll n, dp[300005][2];
int main() {
	cin >> n;
	ll x, y;
	for (int i = 1; i <= n; i++) {
		cin >> x >> y;
		if (x == 0) {
			dp[i][0] = max(dp[i][0], max(dp[i - 1][0] + y, dp[i - 1][1] + y));
		}
		else {
			dp[i][1] = max(dp[i][1], dp[i - 1][0] + y);
		}
		dp[i][0] = max(dp[i][0], dp[i - 1][0]);
		dp[i][1] = max(dp[i][1], dp[i - 1][1]);
	}
	cout << max(dp[n][0], dp[n][1]) << endl;
	return 0;
}

当然这个代码还可以再优化一下空间复杂度:

#include <iostream>
using namespace std;
typedef long long int ll;
ll n;
int main() {
    cin >> n;
    ll p0 = 0, p1 = 0;
    ll x, y;
    for (int i = 1; i <= n; ++i) {
        cin >> x >> y;
        if (x == 0) {
            p0 = max(p0, max(p0 + y, p1 + y));
        }
        else {
            p1 = max(p1, p0 + y);
        }
    }
    cout << max(p1, p0) << endl;
}

轻松搞定!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/669692.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

web前端框架JS学习之JavaScript类型转换

vascript有多种数据类型&#xff0c;如字符串、数字、布尔等&#xff0c;可以通过typeof语句来查看变量的数据类型。数据类型转换就是数据类型之间相互转换&#xff0c;比如把数字转成字符串、把布尔值转成字符串、把字符串转成数字等&#xff0c;这在工作也是经常碰到的。 本…

C++----继承,多重继承(7)

面向对象的三大特征 封装 继承 多态 封装 该隐藏的数据私有化&#xff0c;该公开的数据设计为公有的接口 private public 目的为了更好地分工合作&#xff0c;有助于数据的安全性和使用的方便性&#xff0c;也防止不必要的扩展。 继承(inherite) 作用 实现了代码的复用&a…

浅析餐饮油烟对环境空 气质量的影响与对策

摘 要&#xff1a;为进一步揭示餐饮油烟的空气污染特性&#xff0c;研究了达州市市政中心环境空气自动监测站周边某餐饮业餐饮油烟对该站点周边环境的影响。结果表明:1&#xff09;距离餐饮油烟排气口越近&#xff0c;餐饮油烟对颗粒物的影响越明显&#xff0c;反之亦然。同时&…

编译原理笔记10:语言与文法,正规式转CFG,正规式和CFG,文法、语言与自动机

目录 正规式&#xff0c;和 CFG正规式到 CFG 的转换&#xff1a;正规式和 CFG 的关系为毛不用 CFG 描述词法规则贯穿词法、语法分析始终的思想 上下文有关文法 CSG文法、语言与自动机0型文法&#xff1a;1型文法&#xff1a;2型文法&#xff1a;3型文法&#xff1a;为什么&…

从0到1基于ChatGLM-6B使用LoRA进行参数高效微调

之前尝试了基于LLaMA使用LoRA进行参数高效微调&#xff0c;有被惊艳到。相对于full finetuning&#xff0c;使用LaRA显著提升了训练的速度。 虽然 LLaMA 在英文上具有强大的零样本学习和迁移能力&#xff0c;但是由于在预训练阶段 LLaMA 几乎没有见过中文语料。因此&#xff0…

pdf上传文件过大怎么缩小?pdf在线压缩的简单方法

在日常使用中&#xff0c;我们经常会遇到需要共享或传输pdf文件但是文件过大无法传输的情况&#xff0c;需要使用压缩图的pdf压缩&#xff08;https://www.yasuotu.com/pdfyasuo&#xff09;功能来解决这个问题&#xff0c;利用这款pdf在线压缩工具可以快速将pdf文件压缩&#…

【三维重建】【深度学习】windows10下NeRF代码Pytorch实现

【三维重建】【深度学习】windows10下NeRF代码Pytorch实现 提示:最近开始在【三维重建】方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法。 文章目录 【三维重建】【深度学习】windows10下NeRF代码Pytorch实现前言NeRF模型运行下载源码并安装环境训练NeRF训练…

【AI底层逻辑】——篇章12:统计学与概率论数据“陷阱”

目录 引入 一、“思维方式”是解题关键&#xff01;&#xff01; 1、统计思维的诞生 2、概率的力量 概率与数理统计的区别&#xff1f; 如何验证假设&#xff1f; 经验与现实如何共存——贝叶斯定理&#xff1f; “朴素”的朴素贝叶斯&#xff1f; 二、数据“陷阱” …

HTTP Host 头攻击是什么?

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言什么是HTTP Host头…

小鱼深度产品测评之:阿里云云产品OCR文档自学习,一款面向“无算法基础“的企业与个人开发者用户的产品。

OCR文档自学习 1、引言2、开箱体验3、我的任务菜单3.1 创建任务3.2 编辑任务3.3 创建模板 4、 在线使用 菜单5、 数据监控 菜单6、总结 1、引言 OCR文档自学习&#xff0c;看到这个标题&#xff0c;很多人第一反应就是&#xff0c;我不会算法 这个怎么搞的嘛&#xff1f; 其…

MetaAI发布人工智能语音模型Voicebox

Meta官网博客更新&#xff1a;人工智能研究人员在语音生成人工智能方面取得了突破。我们开发了Voicebox&#xff0c;这是第一个可以推广到语音生成任务的模型&#xff0c;它没有经过专门训练&#xff0c;以最先进的性能来完成。 与图像和文本的生成系统一样&#xff0c;Voicebo…

CRC校验码详解、常见算法实现及代码实例

一、CRC概念 1. 什么是CRC&#xff1f; 在前面的文章中通过小例子的比喻&#xff0c;简单介绍过什么是CRC&#xff0c;这里再详细的讲解一次。 CRC&#xff08;Cyclic Redundancy Checksum&#xff09;是一种纠错技术&#xff0c;代表循环冗余校验和。 数据通信领域中最常用的…

第二十二章_Redis经典五大类型源码及底层实现

redis源码在哪里 \redis-7.0.5\src https://github.com/redis/redis 源码分析参考书&#xff08;推荐&#xff09; 《Redis设计与实现》 《Redis5设计与源码分析》 Redis源代码的核心部分 src源码包下面该如何看&#xff1f; 源码分析思路 这么多你如何看&#xff1f; 1、外…

C/C++ VS2019连接MySQL数据库 - 增删改查(详细步骤)

一、配置Visual Studio 找到自己安装MySQL的路径&#xff0c;确保有include和lib两个文件夹 打开创建的Visual Studio项目&#xff0c;切换x64平台 注意&#xff1a;如果你的项目中没有x64平台&#xff0c;请严格按照下面图片的步骤进行操作 a. 点击下拉框&#xff0c;点击配…

面向对象程序设计|理解++i和i++

首先我们从最简单的整型运算来理解前和后&#xff1a; 将a10再赋值20意味着(a10)返回的是a的空间&#xff0c;又把这个20赋值给这个空间的内存&#xff0c;最后a20&#xff1b; (a)意味着a返回的是空间&#xff08;引用&#xff09;&#xff0c;可以继续作的调用&#xff0c;引…

Java版本工程项目管理系统源码

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目显示…

STM32存储器映射

STM32的寻址范围 32位的单片机有32根地址线&#xff08;每根地址线有两种状态&#xff1a;导通或者不导通&#xff09;。 单片机内存地址访问的存储单元是按字节编址的。 存储器映射 存储器指可以存储数据的设备&#xff0c;本身没有地址信息&#xff0c;对存储器分配地址…

JAVA_HOME变量的详细配置(图文)

用到Java项目的时候&#xff0c;有时候要用到Java_home&#xff0c;这个需要在系统配置中配置一下。如何操作呢&#xff1f;以下为详细的图文步骤。 1&#xff09;打开环境变量的窗口 2&#xff09;打开新建系统变量 3&#xff09;编辑JAVA_HOME 在变量名后输入JAVA_HOME,找到…

IDEA配置本地Maven详细教程

IDEA配置本地Maven详细教程 一、下载二、安装三、配置环境变量四、IDEA配置Maven 一、下载 官网下载&#xff1a;点击下载 网盘下载&#xff1a;点击下载 二、安装 将下载后的zip文件&#xff08;免安装版&#xff09;解压到自己想要放的位置&#xff0c;&#xff0c;我这里…

第八十一天学习记录:gVim的使用

首先&#xff0c;根据所使用的系统下载VIM&#xff0c;百度搜索或者CSDN搜索有资源可以下载。 gVim是Windows下的一个Vim实现&#xff0c;它提供了类似于Vim命令行界面的编辑器视窗&#xff0c;并且支持通过鼠标和菜单来执行一些基本的编辑命令。 安装完成后&#xff0c;桌面上…