数字分段(dp)

news/2025/1/6 20:25:09/文章来源:https://www.cnblogs.com/shen-kong/p/18652298

给定数组, 将数组分为尽可能少的段使得每一个段的第一个或最后一个数字是段的长度, 求最少的段数
线性dp
令 dp[i] 表示将前 i 个数字全部分好段最少的段数
dp[0] = 0
枚举每一个 a[i], 这个数字有两种分段方案:
作为某个段的结尾: dp[i] = min(dp[i], dp[i - a[i]] + 1)
作为某个段的开头: dp[i + a[i] - 1] = min(d[i + a[i] - 1], dp[i - 1] + 1)

#include<bits/stdc++.h>
using i64 = long long;
using u64 = unsigned long long;
using u32 = unsigned int;
using i128 = __int128;
#define TEST 
#define TESTS int _; cin >> _; while(_--)
using namespace std;
void Main() {int n;vector<int> a(800000, 0);vector<int> dp(800000, 800000);cin >> n;for(int i = 1; i <= n; ++i) cin >> a[i];dp[0] = 0;for(int i = 1; i <= n; ++i) {// 作为结尾if(i - a[i] >= 0) dp[i] = min(dp[i - a[i]] + 1, dp[i]);// 作为开头dp[i + a[i] - 1] = min(dp[i + a[i] - 1], dp[i - 1] + 1);}if(dp[n] == 800000) cout << "-1\n";else cout << dp[n] << '\n';
}
int main() {ios :: sync_with_stdio(false);cin.tie(0); cout.tie(0);TESTS Main();return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学期2024-2025-1 学号20241424 《计算机基础与程序设计》第15周学习总结

学期2024-2025-1 学号20241424 《计算机基础与程序设计》第15周学习总结 作业信息 |这个作业属于2024-2025-1-计算机基础与程序设计)| |-- |-- | |这个作业要求在2024-2025-1计算机基础与程序设计第15周作业| |这个作业的目标|<作业总结>| |作业正文|https://www.cnblog…

中考英语优秀范文-008 when you in China, do as the Chinese do! 当你在中国时,入乡随俗!

1 写作要求 在不同的地方有不同的风俗习惯,饮食文化很重要。中国的饮食文化不同于西方。 请你谈谈中国的三餐,以“when you in China, do as the Chinese do!” 为题写一篇短文。 要求: 80词左右,内容合理; 要点齐全; 句子及篇章结构准确、连贯;书写规范。 2 优秀范文 W…

MongoDB集群中数据分布与分片

MongoDB集群中数据分布 Chunk是什么 在一个shard server内部,MongoDB还是会把数据分为chunks,每个chunk代表这个shard server内部一部分数据。chunk的产生,会有以下两个用途:Splitting:当一个chunk的大小超过配置中的chunk size时,MongoDB的后台进程会把这个chunk切分成更…

RoomFormer、FRI-Net

WSL CUDA安装 【一文解决】已安装CUDA与Pytorch但torch.cuda.is_available()为False_torch.cuda.is available返回false-CSDN博客 cuda安装 Ubuntu 20.04安装CUDA & CUDNN 手把手带你撸_ubuntu20.04安装cuda-CSDN博客 【CUDA】Ubuntu系统如何安装CUDA保姆级教程(2022年最新…

5G核心网短信解决方案概述

短信作为传统无线网络的基础业务,随着移动网络的飞速发展,我们会发现,在日常生活中我们使用短信进行沟通的情况越来越少了。但是在我们使用各种业务的时候,仍然离不开短信,例如: 注册新的APP、密码找回,快递取件,收发验证码等,对于安全性要求较高的业务,更要使用短信…

docker 安装doris

下载镜像docker pull apache/doris:build-env-ldb-toolchain-latest下载安装包 https://doris.apache.org/zh-CN/downloadwget https://apache-doris-releases.oss-accelerate.aliyuncs.com/apache-doris-2.1.7-bin-x64.tar.gz然后需要下载MySQL,这里提供MySQL的免安装版MySQL…

Windows单机安装MongoDB分片集群

Windows单机部署MongoDB分片集群 规划和准备 端口规划 操作系统:Windows Server 2012 MongoDB版本:4.2.25IP/节点名 mongos config shard1 shard2 shard3127.0.0.1(mongo1) mongos1(27017) config1(27018) 主(27001) 主(27002) 主(27003)127.0.0.1(mongo2) mongos2(27027…

学习-Nginx-安装nginx1.21.6开源软件

下载地址 http://nginx.org/download/nginx-1.21.6.tar.gz 通过网盘分享的文件:Nginx1.21.6 链接: https://pan.baidu.com/s/1tcsTs2IEmN80wt5VQ5U3PA?pwd=sky1 提取码: sky1 Xftp 传输安装包解压缩安装包 tar zxvf nginx-1.21.6进入到 nginx文件夹查看需要的依赖 ./configur…

C# 内嵌数据库 SQLite

最近,看到一个软件,软件是使用的内嵌数据库。我对这个东西没有实践过,今天突然想亲手做一做!。关于SQLIte的资料我就不多说了,网上都有。我自己也整理了一部分,基本上可以对SQLite有个全面的了解了。我这里就不废话了,直接上我自己的代码。 1:首先要先下载一个SQLite的…

Rust远程加载shellcode

学习rust, 练习写一个loader, 不足之处还请指教编写 隐藏黑框 在注释掉所有打印语句后编译运行还是会弹黑框, 解决方法是头部添加一行(指定 Rust 编译器生成的可执行文件为 Windows 子系统应用程序,而不是控制台应用程序): #![windows_subsystem = "windows"]‍ 反…

RustLoader

学习rust, 练习写一个loader, 不足之处还请指教编写 隐藏黑框 在注释掉所有打印语句后编译运行还是会弹黑框, 解决方法是头部添加一行(指定 Rust 编译器生成的可执行文件为 Windows 子系统应用程序,而不是控制台应用程序): #![windows_subsystem = "windows"]‍ 反…

机房轶事_2

机房轶事_2 之前 机房某同学的Luogu账号被另一个同学破解了密码,并且把头像改成了遗照(配花环)。 更过分的是,他居然将封面改成了教练的照片。