求助一道没有原题的贪心
  • 板块学术版
  • 楼主Supor__Shoep
  • 当前回复29
  • 已保存回复29
  • 发布时间2022/8/11 16:49
  • 上次更新2023/10/27 15:55:55
查看原帖
求助一道没有原题的贪心
439177
Supor__Shoep楼主2022/8/11 16:49

今天心血来潮想练一下贪心,然后就自己想了一道题出来。

对于一个长度为 nn 的数列 aa,将数列分成 mm 段,而每一段分出来的所有数都要减去相应的值,求怎么分段才能使得最后数列中大于 00 的数的个数最多。

举个例子,对于数列 3 4 2 3 1 73~4~2~3~1~7,需要分成 33 段并且每一段减去的值分别为 1 5 81~5~8,我们可以分成 3 4 2 33~4~2~31177 总共三段,减去相应的值后整个数列变成了 2,3,1,2,4,12,3,1,2,-4,-1 总共有四个大于 00 的数。

本人想的就是用下面的代码,正着跑一遍,然后倒序 aa 数组和 bb 数组再倒着跑一遍,最后取两个答案的最大值。

for(int i=1;i<=n;i++)
{
	if(n-t+1==n-i+1)	sum+=(a[i]>b[t]),t++;
	else if(a[i]>b[t])
	{
		if(t<m&&a[i]<=b[t+1])	sum++;
		else if(t==m)	sum++;
		else if(t<m&&a[i]>b[t+1])
		{
			if(b[t+1]<b[t])	t++;
		}
	}
	else
	{
		if(t<m&&a[i]<=b[t+1])	t++;
		else if(t==m)	continue;
		else if(t<m&&a[i]>b[t+1])	t++;
	}
}
2022/8/11 16:49
加载中...