找朋友2

news/2024/9/19 20:44:03/文章来源:https://www.cnblogs.com/maniubi/p/18419132

找朋友2

题意

给出 \(n\) 个数,要求每连续 \(m\) 选出至少两个数,求出选出数和的最小值。

思路

定义 \(dp_{i,j}\) 表示考虑前 \(i\) 个人,第 \(i\) 个人和第 \(i-j\) 个人必选的和的最小值。

\[dp_{i,j} = \min_{j+k\le m} \left \{ dp_{i-j,k} \} \right. +a_i \]

\(j+k>m\)\([i-m+1,i]\) 这个区间就只选了一个数,不合法。

时间复杂度:\(O(nm^2)\),空间复杂度:\(O(nm)\),均不能通过,考虑优化。

发现 \(\min\) 中的方程是前缀最小值的形式,转移时维护一下。

发现当前有用的状态只有 \([i,i-m+1]\)\(m\) 个,只用开一个 \(O(m^2)\) 的数组,将下标 \(\bmod m\) 即可。

代码

#include <bits/stdc++.h>
using namespace std;
const int N = 2e4 + 5;
const int M = 2e3 + 5;
int n, m, a[N], dp[M][M], Min[M][M], ans;
void solve() {cin >> n >> m;for (int i = 1; i <= n; i ++) cin >> a[i];for (int j = 0; j <= m; j ++) {dp[0][j] = Min[0][j] = 0; }for (int i = 1; i <= m; i ++) {for (int j = 0; j <= m; j ++)dp[i][j] = Min[i][j] = 0x3f3f3f3f;}
//	memset(dp, 0x3f, sizeof(dp));
//	memset(Min, 0x3f, sizeof(Min));ans = 0x3f3f3f3f;
//	memset(dp[0], 0, sizeof(dp[0]));
//	memset(Min[0], 0, sizeof(Min[0]));for (int i = 1; i <= n; i ++) {int now = i % m;for (int j = 0; j <= m; j ++)Min[now][j] = 0x3f3f3f3f, dp[now][j] = 0x3f3f3f3f;for (int j = 1; j <= min(i, m); j ++) {
//			int Min = 0x3f3f3f3f;
//			for (int k = 1; k <= m - j; k ++) {
//				Min = min(Min, dp[i - j][k]);
//			}
//			dp[i][j] = Min + a[i];int pre = (i - j + m) % m;dp[now][j] = Min[pre][m - j] + a[i];Min[now][j] = min(Min[now][j - 1], dp[now][j]);if (i >= n - m + 1 + j) ans = min(ans, dp[now][j]);
//			cout << i << " " << j << " " << dp[i][j] << "\n";}for (int j = 1; j <= m; j ++)Min[now][j] = min(Min[now][j], Min[now][j - 1]);}cout << ans << "\n";
}
int main() {freopen("gaoj.in", "r", stdin);freopen("gaoj.out", "w", stdout);int Case;cin >> Case;while (Case --)solve();return 0;
}

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

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

相关文章

26. 多进程理论、操作

1. 多进程相关理论 1.1 什么是进程 进程是一个正在执行的任务或程序 负责执行任务的是CPU (1)单任务 单核CPU+多道技术  实现多个进程的伪并发 (2)多任务 多个任务并发执行 1.2 进程和程序的区别 程序是代码的集合体 进程是程序的执行过程 1.3 进程的调度算法 (1)先来…

网络基础--UPnP基本原理

网络基础--UPnP基本原理 1、简介 UPnP是通用即插即用(Universal Plug and Play)的缩写,主要用于设备的智能互联互通,使用UPnP协议不需要设备驱动程序,它可以运行在目前几乎所有的操作系统平台上,使得在办公室、家庭和其他公共场所方便地构建设备互联互通成为可能。UPNP为…

VastbaseG100集群部署实操

背景 近日的工作涉及到数据库的集群部署,为了熟悉过程,参考VastgbaseG100官方文档进行部署。 参考文档 https://docs.vastdata.com.cn/zh/docs/VastbaseG100Ver2.2.15/do... 实操 这里采用HAS+DCS+Vastbase的解决方案,详情可参考海量智库第8期|Vastbase G100核心技术介绍之…

网络基础--UPnP基本原理-CSDN博客

网络基础--UPnP基本原理-CSDN博客网络基础--UPnP基本原理-CSDN博客 https://blog.csdn.net/jisuanji111111/article/details/122108226 文章浏览阅读1.4w次,点赞3次,收藏22次。介绍UPNP基本知识点,比较全面。转载自华三文档。_upnp 2024-09-03 13:57:361、简介 UPnP是通用即…

敏捷项目管理工具:团队高效协作的关键

敏捷项目管理:团队高效协作的关键​ 在当今快节奏的市场环境中,企业必须具备快速响应变化的能力。无论是产品研发、软件开发还是市场推广,灵活应对变化和高效管理项目已成为企业成功的关键。于是,敏捷开发这一理念越来越多地被各行业团队采纳,成为了他们高效协作、及时交付…

首个标准+首家通过!大模型媒体处理评估,阿里云智能媒体服务“卓越级”通过

中国信通院近期正式发布《大模型驱动的媒体生产与处理》标准,阿里云智能媒体服务,以“首批首家”通过卓越级评估,并在9大模块50余项测评中表现为“满分”。中国信通院近期正式发布《大模型驱动的媒体生产与处理》标准,阿里云智能媒体服务,以“首批首家”通过卓越级评估,并…

MAC地址+网络层

进制 二进制和十六进制之间 1个16进制可以用4个二进制表示,1:4关系1111是否取值8 4 2 1 取值所代表的数值 在一台交换机上每台设备间的物理链路:不是直连 -- 直接连接 逻辑状态:都处于互联状态,处于一条链路上 MAC地址 由两部分组成,前24位代表该供应商代码,由IEEE管理…

Kubernetes Service与服务发现

1. Service资源基础概念 1.1 Service资源 Service是Kubernetes标准的API资源类型之一为动态的Pod资源提供近似静态的流量入口服务发现:通过标签选择器筛选同一名称空间下的Pod资源的标签,完成Pod筛选实际上是由与Service同名的Endpoint或EndpointSlice资源及控制器完成流量调…

Qt::BlockingQueuedConnection 与 QMetaCallEvent

Qt 创建连接类型如果是 Qt::BlockingQueuedConnection,即sender thread 与 receiver thread 不同, 但是要求 sender signal 与 receiver slot 执行是 不同线程间的同步行为。也即:在sender signal 发出后 sender线程 要 等待 receiver 线程的 slot 执行完后才能继续 向后执行…

设备地址

设备地址 BLE的设备地址可以使用公共地址(Public Device Adress)或者随机地址(Random Device Address),一个BLE至少使用一种地址类型,当然也可以同时使用两种地址类型。 公共地址和随机地址一样,都是48位(6字节),BLE设备地址关系如下:公共地址:从IEEE申请(购买),I…

扫码详见阳子公众号

https://mp.weixin.qq.com/mp/qrcode?scene=10000004&size=102&__biz=MzkwNzc0MjQ1MA==&mid=2247484006&idx=1&sn=43425e98c08a3887b090c927d89cbe40&send_time= 或直接扫码: