首页 > 其他分享 >找朋友2

找朋友2

时间:2024-09-18 19:02:43浏览次数:8  
标签:const min 朋友 int 最小值 ans dp

找朋友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;
}

标签:const,min,朋友,int,最小值,ans,dp
From: https://www.cnblogs.com/maniubi/p/18419132

相关文章

  • 我最好的朋友,润到国外留学了。。
    大家好,我是程序员鱼皮。刚上班,今天就不聊技术了,分享我的一个小故事吧~正如标题所说,我最好的朋友,刚刚润到国外留学了。上周四晚上,我直播到23点半左右,看了眼微信,一整个震惊住了,我从小到大最好的朋友要出国了,想在出国前最后见我一面:因为他明天就走了,所以一直在公司附近等到我下......
  • “精装朋友圈”的年轻人,开始在40度高温买羽绒服
    文|螳螂观察作者|如意人生一世,苦了自己也不能苦朋友圈。这届的年轻人,无论人生有多“毛坯”,都有一个一生要强的朋友圈,而且“装修”朋友圈还有一套哲学,信奉图片精修,排版讲究,文案低调,就连评论区的回复也要字句斟酌。出去旅行,在西藏边吸氧边哭,朋友圈却是一句“永远自由自我,永远高唱......
  • 种草分享|动态朋友圈|瀑布流|uniapp​ V1.0.7
    种草分享评论点赞消息提醒系统,发布动态,分享种草生活,可以收藏关注点赞,消息提醒,同时支持H5/小程序/app多端。V1.0.7修复前端显示问题修复一处三方登录变量赋值问题。......
  • 送给测试行业朋友们的一些中肯建议
    在快速发展的科技时代,软件测试行业也在不断变化。如果你是一名测试人员,或正在考虑进入这个行业,你是否感到迷茫?该如何提升自己,以应对未来的挑战?今天,我为所有测试行业的朋友们带来一些切实的建议,助你们走得更远。作为测试人员,你是否经常面对需求变化、测试工具更新、自动化测试的压......
  • 【喂饭教程】逗女朋友开心的“动态浪漫樱花”代码教程免费发放!
    这个樱花代码不同于普通的生成图片,而是动态的展示其生成过程,更加可以让大家欣赏它的浪漫!大家只要复制代码就可以啦!赶快行动起来吧!(真的是是动态的哦!)axis([-1,5,0,5])set(gca,'XColor','none','YColor','none','Color',[.5,.5,.5])T=[1.2;0;pi/2];a=pi/10;fori=1:16L=......
  • 朋友圈定时发送?一定要学会的宝藏功能简介,赶紧收藏
    作为社交时代的一部分,朋友圈已经成为了我们日常生活中必不可少的交流方式之一。但你是否曾经遇到过这样的问题:朋友圈发布的内容很难吸引到目标受众?那么,不妨试试定时发朋友圈这个神奇的方法,让你轻松拥有高质量的人脉和影响力!定时发朋友圈是一项宝藏时间管理的秘诀。通过......
  • 喜欢干净简洁音乐播放器的朋友看过来
    大家好,我是晓凡。不少程序员小伙伴都喜欢边听音乐边敲代码,尤其在一个嘈杂的环境中,一个好的想法、好的思路可能就因为一瞬间的干扰就没了。这时,如果耳机一戴上,听着音乐能更好的集中注意力;遇到bug也能临危不乱,想出更好的解决办法;网易云音乐,算是一个相对简洁、有趣的播放器了。不......
  • 朋友圈营销发圈时间
    你的好友列表是不是也有N个客户是不是成交了一次还想再成交是不是不好意思天天打扰客户担心被反感不用多说,你经历的这些我都经历过‼️那你一定一定要利用好“朋友圈”这个工具利用好发圈的时间,内容比例,把握好技巧客户会“爱上”你的朋友圈对你这个人产生印象以及好感,才能爆单呀快点......
  • 新手朋友在安装pbootcms经常遇到一些错误(PbootCMS 常见问题及解决方法)
    Parseerror:syntaxerror,unexpected':',expecting'{'问题描述:在 www\core\function\handle.php 文件第130行出现了语法错误,提示意外的冒号。原因分析:此错误通常出现在尝试在较旧的PHP版本上运行需要PHP7.x或更高版本的代码时。PHP7引入了一些新的语法特性,......
  • uniapp精仿微信源码,基于SumerUI 3.0和Uniapp前端框架的一款仿微信APP应用,界面漂亮颜值
    sumer-weixin介绍uniapp精仿微信,基于SumerUI3.0和Uniapp前端框架的一款仿微信APP应用,界面漂亮颜值高,视频商城小工具等,朋友圈视频号即时聊天用于视频,商城,直播,聊天,等等场景,源码分享源码说明:本源码包只提供1.0版本,只有1.0版本是开源的,提供给大家学习研究。源码使用Hbui......