首页 > 其他分享 >处理第k小问题

处理第k小问题

时间:2024-09-24 14:01:52浏览次数:8  
标签:index ch 处理 sum 问题 int cost 正数

题目

正数通常比较好处理,那我们先想个办法把所有的负数转为正数,我们可以求一下所有负数的和 \(sum\) ,这一定是最小数,那我们考虑如何将其变小一点,无非是去掉一个加上的负数或是加上一个正数,诶,那这样,去掉负数不就等于加上一个正数吗,这样我们就可以将所有的负数转化为正数,选出来的数在加上 \(sum\) 即可。

那我们就开始考虑处理第 \(k\) 小的问题,数据太大,背包肯定不行,暴搜肯定会 \(T\) ,我们可以考虑一下暴搜的过程,唯一的问题就是无法使它先去优先遍历最优的答案,那我们考虑一种方式来维护最优,同样还能像暴搜一样依次去遍历状态,没错,优先队列就可以完成这些要求。

我们先按元素从大到小排序,用二元组 \(pair<cost,id>\) 表示一个方案,其中 \(cost\) 表示当前方案的花费, \(id\) 表示当前考虑到了第几个元素,我们维持一个 \(cost\) 的小根堆。

每当从堆中弹出一个方案 \((cost,index)\) , 因为它是当前最小的所以可以直接输出, 然后只需要将另外两个方案 \((cost+s[index+1],index+1)\),以及\((cost+s[index+1]-s[index],index+1)\)放入堆中即可.

这样的生成方式有一个好处, 生成的每个方案都是合法的而且生成的方案必然大于等于原方案, 因此可以用堆维护.

点击查看代码
#include<bits/stdc++.h>
using namespace std;


#define int long long
const int N=4e6+107;
int n,k;
int a[N],sum,s;
int f[N],num[N];
int read()
{
	int f=1,s=0;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){s=(s<<1)+(s<<3)+(ch^48);ch=getchar();}
	return f*s;
}

priority_queue< pair<int,int>,vector< pair<int,int> >,greater< pair<int,int> > >q;

signed main()
{
	freopen("subset.in","r",stdin);
	freopen("subset.out","w",stdout);
	n=read(),k=read();
	for(int i=1;i<=n;i++) a[i]=read();
	sort(a+1,a+1+n);
	for(int i=1;i<=n;i++)
	{
		if(a[i]>=0) break;
		sum+=a[i];
		a[i]=-a[i];
	}
	printf("%lld\n",sum);
	k--;
	sort(a+1,a+1+n);
	q.push(make_pair(a[1],1));
	while(!q.empty())
	{
		int x=q.top().first,y=q.top().second;
//		cout<<x<<' '<<y<<endl;
		q.pop();
		printf("%lld\n",sum+x);
		k--;
		if(k==0) return 0;
		if(y+1<=n) q.push(make_pair(x+a[y+1],y+1));
		if(y+1<=n) q.push(make_pair(x+a[y+1]-a[y],y+1));
	}
	
}

标签:index,ch,处理,sum,问题,int,cost,正数
From: https://www.cnblogs.com/zhengchenxi/p/18428268

相关文章

  • Java 音视频处理详解
    Java作为一种通用的编程语言,具备强大的跨平台能力和丰富的第三方库支持,使其在音视频处理领域也能大展拳脚。本文将详细介绍Java在音视频处理中的常用技术和方法,包括音视频捕获、处理、存储和播放。通过对实际代码示例的讲解,帮助读者深入理解并掌握Java音视频处理的核心内容。......
  • 跑lvs出现soft connect怎么处理?
      首先,我们先了解一下什么是softconnect。简而言之,就是工具会将所有连接在psub上的信号认作softconnect(也就是short)。如图1所示,VSS和AVSS都接到了p+上,它们通过psub便有了softconnect。    如果有softconnect的话,lvs是没法pass的,会发现很多一堆stdcell连接了错......
  • AWS注册时常见错误处理
    引言创建AWS账号是使用AWS云服务的第一步,但在注册过程中可能会遇到一些常见的问题。本文中九河云将帮助您排查和解决在创建AWS账户时可能遇到的一些常见问题,包括未接到验证电话、最大失败尝试次数错误以及账户激活延迟等。常见问题及解决方法1.我没有接到AWS验证新账户的电......
  • MySQL零基础入门教程-5 单行处理函数、分组函数、mysql关键字执行顺序,基础+实战
    教程来源:B站视频BV1Vy4y1z7EX001-数据库概述_哔哩哔哩_bilibili我听课整理的课程的完整笔记,供大家学习交流下载:夸克网盘分享本文内容为完整笔记的第五篇17、单行数据处理函数P30-36&分组函数17.1、数据处理函数又被称为单行处理函数单行处理函数的特点:一个输入对应一个输出。和单行......
  • 全面了解CyberChef:一个强大的数据处理工具
    CyberChef是一个强大的网络工具,旨在处理和分析数据。它通过简单的拖放界面提供了各种功能,适用于安全研究人员、开发者和数据分析师。下面是关于CyberChef的全方面知识,包括其主要功能、使用场景和优势。1.功能编码与解码:支持多种编码格式,如Base64、Hex、URL编码等,可以方便地进行编......
  • Python中的集合:解锁数据处理的新维度
    引言集合是一种无序且不允许重复元素的数据类型。在日常开发中,无论是去除列表中的重复项还是判断两个集合之间的关系(如交集、并集等),集合都能提供简洁高效的解决方案。此外,集合的内部实现使得查找某个元素的时间复杂度接近O(1),这使得它在处理大规模数据时表现得尤为出色。......
  • 组合问题之错排问题
    错排问题n把钥匙,n把锁,随机分配,全部配错的方案数怎么算?钥匙a,除了锁a以外有(n−1)......
  • JSON处理工具类
    JSON处理工具类importorg.json.JSONArray;importorg.json.JSONObject;importjava.util.ArrayList;importjava.util.List;/***JSON处理工具类*/publicclassJsonUtils{/****将json字符串转为map*@paramjson*@returnjava.util.Map<......
  • 非线性规划——无约束最优化问题精讲
    最优化问题的研究历史可以追溯到17世纪的变分法,随着数学、物理学、经济学和计算科学的不断发展,最优化问题逐渐成为一个独立的学科。对于无约束最优化问题的求解,从最早的最速下降法,到后来的牛顿法和共轭梯度法,再到现代的变尺度法和智能算法,发展历程反映了科学技术进步的轨迹。无约......
  • flink 大批量任务提交 yarn 失败问题
    问题现象用户迁移到新集群后,反馈他们开发平台大量flink任务提交失败了,当时集群的yarn资源是足够的排查过程用户是在他们的开发平台上提交的,查看他们失败的任务,发现是他们提交端主动Kill的,接着沟通发现他们提交平台有个逻辑就是提交到yarn的flink任务,如果在2......