首页 > 其他分享 >最优 K 子段

最优 K 子段

时间:2024-07-31 10:55:04浏览次数:14  
标签:prime 200005 子段 int mid cin cc 最优

  • 素数的密度约为ln(n),这就是说,1~n中素数的个数约为\(\frac {n}{ln(n)}\)
  • 观察你写出来的DP转移式,可以发现检查时没有必要DP,直接贪心就好了
  • 由于数据随机,最后十分钟“乱搞”两次成功过题,开心~
点击查看代码
#include <bits/stdc++.h>
using namespace std;
int prime[20005],m;
int v[200005];
int a[200005],s[200005],f[200005];
int n,k;
int read1()
{
	char cc=getchar();
	while(!(cc>=48&&cc<=57))
	{
		if(cc=='-')
		{
			break;
		}
		cc=getchar();
	}
	bool f=false;
	int s=0;
	if(cc=='-')
	{
		f=true;
	}
	else
	{
		s=cc-48;
	}
	while(1)
	{
		cc=getchar();
		if(cc>=48&&cc<=57)
		{
			s=s*10+cc-48;
		}
		else
		{
			break;
		}
	}
	if(f==true)
	{
		s=-s;
	}
	return s;
}
bool check(int minn)
{
	int x=lower_bound(prime+1,prime+m+1,abs(minn)/10)-prime;
	int L=max(x-1200,1);
	int R=min(x+1200,m);
	for(int i=1;i<=n;i++)
	{
		f[i]=f[i-1];
		for(int j=L;j<=R&&prime[j]<=i;j++)
		{
			if(f[i-prime[j]]+1<=f[i])
			{
				break;
			}
			if(s[i]-s[i-prime[j]]>=minn)
			{
				f[i]=f[i-prime[j]]+1;
				break;
			}
		}
		if(f[i]>=k)
		{
			return true;
		}
	}
	return false;
}
int main()
{
	for(int i=2;i<=200000;i++)
	{
		if(v[i]==0)
		{
			v[i]=i;
			m++;
			prime[m]=i;
		}
		for(int j=1;j<=m;j++)
		{
			if(prime[j]>v[i]||i*prime[j]>200000)
			{
				break;
			}
			v[i*prime[j]]=prime[j];
		}
	}
	int T;
	cin>>T;
	while(T--)
	{
		cin>>n>>k;
		int smax=INT_MIN,smin=INT_MAX;
		int curmin=0,curmax=0;
		for(int i=1;i<=n;i++)
		{
			a[i]=read1();
			s[i]=s[i-1]+a[i];
			smax=max(smax,s[i]-curmin);
			smin=min(smin,s[i]-curmax);
			curmin=min(curmin,s[i]);
			curmax=max(curmax,s[i]);
		}
		if(n/2<k)
		{
			puts("impossible");
			continue; 
		}
		int l=smin,r=smax;
		while(l<r)
		{
			int mid=(l+r+1)>>1;
			if(check(mid))
			{
				l=mid;
			}
			else
			{
				r=mid-1;
			}
		}
		cout<<l<<endl;
	}
	return 0;
}

标签:prime,200005,子段,int,mid,cin,cc,最优
From: https://www.cnblogs.com/watersail/p/18334189

相关文章

  • 最大子段和 - 题解
    最大子段和时间限制:C/C++1000MS,其他语言2000MS内存限制:C/C++128MB,其他语言256MB描述给出一个长度为\(n\)的序列\(a\),选出其中连续且非空的一段使得这段和最大。输入描述第一行是一个整数,表示序列的长度\(n\)。第二行有\(n\)个整数,第\(i\)个整数表示序列的第......
  • 最优化(11):信赖域算法、非线性最小问题二乘算法
    4.6信赖域算法——第一小节给出了信赖域算法的框架,第二小节讨论了信赖域子问题的求解方法(迭代法、截断共轭梯度法),第三小节主要介绍算法收敛性;4.7非线性最小二乘问题算法——第一小节给出了非线性最小二乘问题的一般形式,第二小节主要介绍高斯-牛顿算法,第三小节主要介绍Leve......
  • 帝国CMS如何设置是安全最优化的
    帝国CMS如何设置是安全最优化的:(注:以下选项都是非必须设置,只是优化建议。)php配置文件php.ini设置:1、magic_quotes_gpc设置为On  魔术引用,此项建议开启。2、register_globals设置为Off  PHP全局变量,此项建议关闭。3、display_errors设置为Off  不显示PHP错误提......
  • 梯度方法求解最优投资组合问题 (二次规划问题)
    优化程序分析师的目标是帮助投资者“做最好的事”。他们的共同目标应该是制定一套投资策略,为投资者提供最大可能的效用。在某些情况下,这可以形式化为一个涉及目标函数最大化的问题(例如投资者的投资组合的效用),该问题受到一个或多个约束(例如投资者的财富水平所施加的约束)。在投......
  • 战斗机飞行的最优高度 为什么低空飞不快 高空也飞不快
    战斗机在不同高度飞行的速度受到多种因素的影响,这包括空气密度、引擎效率和空气阻力等。以下是对不同高度对战斗机速度影响的简要分析:低空飞行:空气密度高:在低空,空气密度较大。这会导致较大的空气阻力,增加战斗机飞行时的阻力,从而限制速度。引擎效率:某些类型的引擎在低空时效......
  • 支付宝商户池最优质的支付通道
     支付宝商户池,作为国内领先的支付服务提供商,始终致力于为广大商户提供最优质、最安全、最便捷的支付通道。在数字化时代,支付通道的顺畅与否直接关系到商户的运营效率和客户体验,因此,选择一家可信赖的支付服务提供商显得尤为重要。支付宝商户池通过多年的积累和技术创新,已经成......
  • 【最优化方法】期末考试题型讲解部分 - 凸集的证明
    题型填空(10道题左右)、证明题、计算题、应用题证明题考察:第一章习题题目证明集合(S)是凸集集合(S)定义如下:S={......
  • 题解 P1115 最大子段和
    link容易想到朴素做法:for(intl=1;i<=n;++i){for(intr=1;j<=n;++j){intv=s[r]-s[l-1];ans=max(ans,v);}}但是显然\(\mathrm{\color{#052242}TLE}\)再回头看代码:想要v最大,只需要\(\large{S_{l-1}}\)最小即可......
  • 跨平台文件传输工具盘点,ToDesk性能最优
    当代打工人少不了经常需要在手机电脑上互传文件,作为工作文件备份或是方便随时查看。那么互传文件有什么简单高效的工具吗?今天小编来盘点几款跨平台文件传输工具,可以手机电脑互通传输,工作生活上都能用到!需要的话不妨收藏+转发,下次再想找就很方便啦!微信:聊天软件也能传文件微信......
  • Mybatis-Plus最优化持久层开发
    Mybatis-plus:最优化持久层开发一:Mybatis-plus快速入门:1.1:简介:Mybatis-plus(简称MP)是一个Mybatis的增强工具,在mybatis的基础上只做增强不做改变;提高效率;自动生成单表的CRUD功能;提供了丰富的条件拼接方式;全自动ORM类型持久层框架;(不仅提供数据库操作的方法,还会提供sql语句......