Codeforces Round 932 (Div. 2)C. Messenger in MAC 有序简化题目,dp,dp优化

news2024/11/16 12:01:07

Problem - C - Codeforces

目录

题意:

思路:

状态转移方程:

参考代码:


题意:

给两个长度为n数组a,b,和整数 l

任取若干下标,使得这个式子

不超过 l 的最多下标数。

思路:

可以根据右侧部分排好序依次减。

所以我们先对数组排序,按b的大小排。

然后用动态规划求 下标 i 之前 取 j 个 的最小值。

dp [ i ] [ j ]  =  dp [ k ] [ j -1 ]  + a[ i ] + b[ i ] - b[ k ]

k是指 i 之前的,取 j - 1个时的最小dp的下标。

但是这里有个k就三维了,不过我们可以这样优化:

 dp [ i ] [ j ]  =  dp [ k ] [ j -1 ] - b[ k ] + a[ i ] + b[ i ]

用 g[ j-1 ] = dp[ k ][j - 1] - b[ k ]

即 g[ j ] = dp[ k ][ j ] - b[ k ]

代表此前取 j 次最小的dp[ k ][ j ] - b[ k ]

我们在dp的过程中一直维护这个g[ j ]即可。

所以

状态转移方程:

dp [ i ] [ j ]  = g[ j ] + a[ i ] + b[ i ]

然后就可以去找数目最多的小于 l 的结果了。

参考代码:

注意dp时不能先次数再下标,因为本次可能为了更小,取了更靠后的数。。


#include<bits/stdc++.h>

using namespace std;

#define ll long long
#define endl "\n"
#define int long long
const ll inf = 1e9;
const ll MOD = 0x77777777737;
const int maxn = 1e9;
int dp[2003][2003];
void solve()
{
	int n, l;
	cin >> n >> l;
	vector<int>a(n), b(n),c(n),g(n+1);
	for (int i = 0; i < n; i++)
	{
		cin >> a[i] >> b[i];
	}
	iota(c.begin(), c.end(),0);
	sort(c.begin(), c.end(), [&](int l,int r)
		{
			return b[l] < b[r];
		});
	

	for (int i = 1; i <= n; i++)
		g[i] = LLONG_MAX;
	for (int i = 0; i < n; i++)
	{
		for (int j = i+1; j > 1; j--)//个数
		{
			//dp[i][j] = dp[k][j-1]-b[k]+a[c[i]]+b[c[i]];
			dp[i][j] = g[j-1]+a[c[i]]+b[c[i]];
			g[j] = min(dp[i][j] - b[c[i]],g[j]);
		}
		dp[i][1] = a[c[i]];
		g[1] = min(g[1],a[c[i]] -b[c[i]]);
	}



	//再用g去统计一下答案
	for (int i = 1; i <= n; i++)
		g[i] = LLONG_MAX;
	for (int i = 0; i < n; i++)
	{
		for (int j = i + 1; j >= 1; j--)//个数
		{
			g[j] = min(g[j], dp[i][j]);
		}
	}

	for (int i = n; i >= 0; i--)
	{
		if (g[i] <= l)
		{
			cout << i << endl;
			return;
		}
	}
}
signed main()
{
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	int t = 1;
	cin >> t;
	while (t--)
	{
		solve();
	}
	return 0;
}


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

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

相关文章

【干货】桌面运维当中,我最常见遇到的几个问题!

作为IT工程师&#xff0c;不管大小事凡是涉及到信息化相关的都会来找&#xff0c;平常碰到最多的当然是电脑使用方面的了&#xff0c;比如什么C盘满了需要帮忙清一下&#xff0c;电脑太慢了需要帮忙看看啥的&#xff0c;一般新来的小伙子们就会被分配去干这些事情&#xff0c;但…

git克隆过程报错

设置 git config 来强制 git 使用 HTTP 1.1 git config --global http.version HTTP/1.1想将其设置回 HTTP2&#xff0c;你可以这样做 git config --global http.version HTTP/2

植物病害识别:YOLO茶叶病害识别数据集

茶叶病害识别数据集&#xff0c;3200多张茶叶病害图像数据&#xff0c;yolo标注完整&#xff0c;适用于茶叶病害识别&#xff0c;包含藻斑病、褐斑病、鸟眼斑病&#xff0c;炭疽病&#xff0c;红斑病5个类别。 增强方式&#xff1a;&#xff08;3倍增强&#xff09; 剪切&…

数据库备份.....

一.环境准备 数据库备份&#xff0c;数据库为school&#xff0c;素材如下 >create database school; >use school1.创建student和score表CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , bi…

为什么TikTok视频0播放?账号权重提高要重视

许多TikTok账号运营者都会遇到一个难题&#xff0c;那就是视频要么播放量很低&#xff0c;要么0播放&#xff01;不管内容做的多好&#xff0c;最好都是竹篮打水一场空&#xff01;其实你可能忽略了一个问题&#xff0c;那就是账号权重。下面好好跟大家讲讲这个东西&#xff01…

redis缓存(穿透, 雪崩, 击穿, 数据不一致, 数据并发竞争 ), 分布式锁(watch乐观锁, setnx, redission)

redis的watch缓存机制 WATCH 机制原理&#xff1a; WATCH 机制&#xff1a;使用 WATCH 监视一个或多个 key , 跟踪 key 的 value 修改情况&#xff0c;如果有key 的 value 值在事务 EXEC 执行之前被修改了&#xff0c;整个事务被取消。EXEC 返回提示信息&#xff0c;表示 事务已…

代码随想录刷题笔记-Day31

1. 最大子序和 53. 最大子数组和https://leetcode.cn/problems/maximum-subarray/ 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组&#xff1a;是数组中的一个连续…

软件工程顶会——ICSE '24 论文清单、摘要

1、A Comprehensive Study of Learning-based Android Malware Detectors under Challenging Environments 近年来&#xff0c;学习型Android恶意软件检测器不断增多。这些检测器可以分为三种类型&#xff1a;基于字符串、基于图像和基于图形。它们大多在理想情况下取得了良好的…

数据结构与算法第二套试卷大题

1.选择排序&#xff0c;插入排序的思路 1.1选择排序思路&#xff1a; 1.每次在数组中选一个最小的元素与第一个元素进行交换——>2.然后逐步缩小数组&#xff0c;重复第一&#xff0c;二步 1.2举例&#xff1a; 假设有一个无序数组 [5, 2, 8, 3, 1]&#xff0c;使用选择排序…

基于单片机的红外测距仪设计

目 录 摘 要 I Abstract II 引 言 1 1 控制系统设计 3 1.1 主控制器选择 3 1.2 项目总体设计 3 2 项目硬件设计 5 2.1 单片机控制模块 5 2.2 测距模块设计 9 2.3 液晶显示模块 10 2.4 报警模块 11 3 项目软件设计 12 3.1 软件开发环境 12 3.2 系统主程序设计 13 3.3 LCD显示程…

外汇天眼科普:什么是场内交易和场外交易?

场内交易 又称交易所交易&#xff0c;指所有的供求方集中在交易所进行竞价交易的交易方式。 这种交易方式具有交易所向交易参与者收取保证金、同时负责进行清算和承担履约担保责任的特点。 此外&#xff0c;由于每个人都有不同的需求&#xff0c;交易所事先设计出标准化的金融…

基于 HBase Phoenix 构建实时数仓(2)—— HBase 完全分布式安装

目录 一、开启 HDFS 机柜感知 1. 增加 core-site.xml 配置项 2. 创建机柜感知脚本 3. 创建机柜配置信息文件 4. 分发相关文件到其它节点 5. 重启 HDFS 使机柜感知生效 二、主机规划 三、安装配置 HBase 完全分布式集群 1. 在所有节点上配置环境变量 2. 解压、配置环境…

一键清除JavaScript代码中的注释:使用正则表达式实现

这个正则表达式可以有效地匹配 JavaScript 代码中的各种注释&#xff0c;并且跳过了以 http: 或 https: 开头的链接。 /\/\*[\s\S]*?\*\/|\/\/[^\n]*|<!--[\s\S]*?-->|(?<!http:|https:)\/\/[^\n]*/gvscode 实战&#xff0c;ctrlF 调出查找替换工具&#xff0c;点…

无尘抹布在洁净室环境中的作用与重要性

导言&#xff1a; 洁净室环境&#xff0c;特别是在制药、电子和生物技术等行业中&#xff0c;对清洁和卫生的要求极为严格。无尘抹布在维护这些环境的洁净和卫生方面起着至关重要的作用。本文将探讨无尘抹布的重要性以及在洁净室环境中的各种应用。 了解无尘抹布 定义和组成&a…

基于SSM的环境监测管理系统设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 主要技术和工具介绍 3 1.1 SSM框架简介 3 1.1.1 Spring 3 1.1.2 Mybatis 数据持久化技术 3 1.1.3 SpringMVC 3 1.2 MySQL数据简介 4 1.3 本章小结 4 2 系统分析 5 2.1 需求分析 5 2.1.1 功能分析 5 2.1.2 用例说明 6 2.2 可行性分析 9 2.…

Unity性能优化篇(十一) 动画优化

1.恰当地设置Animator组件的Culling Mode。Always Animate表示如果该动画不可见&#xff0c;也会播放它。Cull Update Transformations表示如果该动画不可见&#xff0c;则不会渲染该动画&#xff0c;但是依然会根据该动画的播放来改变游戏对象的位置、旋转、缩放&#xff0c;这…

盘点热门的5个AI视频工具(上):附保姆级教程,居然还有免费的?(建议收藏)

一条完全使用 AI 做出的短视频&#xff0c;点赞上万&#xff0c;转发上万&#xff01; 你敢信&#xff0c;这是我在前几天刷视频的时候&#xff0c;看到的一个 AI 视频案例。 这种 AI 视频为什么会火&#xff1f; AI 虽然不是什么新的领域&#xff0c;但 2023 年&#xff0c…

基于springboot的迷你天猫商城设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 系统开发技术 3 1.1 Springboot 3 1.2 MyEclipse 3 1.3 MySQL 3 1.4 Apache JMeter 3 1.5 系统开发背景 4 1.6 系统需求分析 4 1.7 本章小结 4 2 系统分析 5 2.1 技术可行性分析 5 2.2 系统经济可行性分析 5 2.3 系统功能需求分析 5 2.4 …

深圳恒峰智慧|便携式森林灭火泵:森林安全的守护者

在自然环境中&#xff0c;森林是生态系统的重要组成部分&#xff0c;它们为我们提供氧气、净化空气、保持水源和防止土壤侵蚀等重要功能。然而&#xff0c;一旦森林发生火灾&#xff0c;这些宝贵的生态资源将面临巨大的破坏。为了保护森林资源&#xff0c;我们需要一种高效、便…

如何做好【沟通】管理

目录 管理的定义 管理的四大职能&#xff1a; 四共团队&#xff1a; 领导力&#xff1a; 沟通的四种类型听、说、读、写&#xff08;计划、报告&#xff09; 沟通四原则 思维框架&#xff1a;结构树报告 管理的定义 彼得.德鲁克&#xff1a;管理通过他人去完成任务的学…