uva 11997 K Smallest Sum(多路并归+优先队列)

【Cadence】PSS+PSTB/PAC仿真在开关电源稳定性分析中的关键应用 本文深入探讨了Cadence仿真工具中PSS+PSTB/PAC方法在开关电源稳定性分析中的关键应用。针对开关电源作为时变非线性系统的特性,传统STB仿真方法会失效。文章详细阐述了如何通过PSS分析找到周期稳态,并在此基础上利用PSTB或PAC进行精确的环路增益和小信号频响分析,为电源设计提供可靠的稳定性评估与补偿网络设计依据。 阅读详情

题意:给出k个包含k个数的序列,从每个序列中选一个数做和,问前k个最小的和是多少。


本题采用刘汝佳大白书上多路并归的解法。

先考虑2个序列每个序列有k个数的情况。

先假设这两个序列是A和B,且都已经从小到大排好序了。那么先以A序列为基础,把A的每个数先加上B中的最小数得到k个和,此时这里面最小的数肯定是答案中要求的,可以直接把它放到答案里,这个数等于A【1】+B【1】,此时要考虑A【1】+B【2】是否属于答案里。这样把A【1】+B【1】从集合中拿出去,再把A【1】+B【2】加到里面,此时最小的数就是第二个答案,这样以此类推做k次就得到k个答案了。


排序可以用优先队列实现,但是表示某个和是A【1】+B【x】需要设计一个数据结构。

struct node{

         int sum;

         int ord;

}


sum表示这个和,ord表示是A【a】和B【ord】做的和,其中a实际上是不需要存储的。


对于k个序列,实际上做需要做k次这种多路并归就可以了。每次把A和B并归出的k个数赋给A,此时A表示的是前两个序列的k个最小和,再输入下k个数到B,再并归A,B,以此类推。



代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
int K;
int a[760];
int b[760];
struct node{
    int sum;
    int ord;
    node (){}
    node (int sum,int ord):sum(sum),ord(ord){}
    bool operator <(const node obj)const{
        return sum>obj.sum;
    }
};



void Merge(int *A,int *B,int *C){
    priority_queue<node> q;
    for(int i=1;i<=K;i++){
        q.push(node(A[i]+B[1],1));
    }
    for(int i=1;i<=K;i++){
        node tmp=q.top();
        q.pop();
        C[i]=tmp.sum;
        int s=tmp.sum;
        int id=tmp.ord;
        if(id<K) q.push(node(s+B[id+1]-B[id],id+1));
    }
}


int main(){
    while(~scanf("%d",&K)){
        for(int i=1;i<=K;i++){
            scanf("%d",&a[i]);
        }
        sort(a+1,a+K+1);

        for(int i=2;i<=K;i++){
            for(int j=1;j<=K;j++){
                scanf("%d",&b[j]);
            }
            sort(b+1,b+K+1);
            Merge(a,b,a);
        }
        for(int i=1;i<=K;i++){
            printf("%d",a[i]);
            if(i==K) printf("\n");
            else printf(" ");
        }
    }
    return 0;
}



开放自己本机的mysql允许别人连接 需要在左下角搜索记事本应用,右键以管理员身份运行,之后按照上述地址找到my.ini文件,ctrl+F搜索到[mysqld],修改或添加 bind-address 设置,将其更改为 0.0.0.0 或你的计算机的 IP 地址。打开 MySQL 的配置文件 my.ini。username和密码是第3步创建能从远程地址访问的用户和密码,ip地址是ipconfig查看的地址(前提是能ping通,才能连接该地址对应的数据库)。使用 MySQL 命令行连接到自己的数据库,并创建一个能够从远程地址访问的用户。 阅读详情

相关推荐

过压保护电路(OVP)

作者:AirCity 2020.2.4 Aircity007@sina.com 本文所有权归作者Aircity所有 1 示例一 当VBUS=5V时,各点电压电流如图所示,Q1接近截止,输出信号是5V。 当VBUS=5.4V开始,输出信号开始下降,直到VBUS=6.1V,输出信号降低为0.6V。 下面是实测波形,这个电路,输出信号的电压不会超过5.4V,这个输出信号可用于电源的控制信号。 2 ...

AirCity123的博客 3万+

【CodeVS】1245 - Ⅲ - 变式Ⅱ之【Uva】11997 K Smallest Sum

【注】 标题有点长啊。首先说明清楚其实就只是【Uva】11997 K Smallest Sum这一道题的题解而已……【题意】 给KK个长度为KK的数组,在每个数组中选择1个数,然后求和,求所能得到的前KK小的和。 【数据范围】K≤750K\leq 750【分析】 其实就是把【CodeVS】1245的两个数组变成了K个数组而已。既然我们已经会求两个的了,那么就尝试着把2个的方法与K个的方法建立

Sdchr 787

NC65实现Restful接口开发及调试

NC65实现Restful接口开发及调试

linzhongshu的专栏 2145

uva11997 K Smallest Sums(优先队列)

题目链接:https://vjudge.net/problem/UVA-11997题意:有k个长度为k的数组,从每个数组中取一个数加在一起得到一个新的数,按照这样操作,问得到的前k个最小的数是什么。思路:一共有k^k次方个数,k<=750,直接构造出来不可行。当只存在两个这样的数组的时候,设分别为数组a, b。分别将a,b数组从小到大排序。 可以构造如下: a1+b1 <= a1+b2 <= a

酱油拌面 419

【软件安装系列】Ubuntu+mysql5.7.27+Jira8.3.1+邮箱服务器配置+Confluence6.15.7安装经验和采坑总结

文章目录一、软件准备(百度云易被吞,就不放了)1.1 官网下载的新鲜的Jira和Confluence1.2 linux的jdk一份1.3 Jira和Confluence的破解程序或者破解包一份1.4 java的连接器一份二、安装过程1--java环境配置2.1 将下载下来的jdk包解压在/usr/local/java目录中2.2 写入环境变量三、安装过程2--mysql5.7.27环境配置3.1 ...

xiaosha_的博客 6894

数字逻辑设计大程——以撒的结合(Verilog语言)

前言 在大二学习数字逻辑设计课程(即计算机组成课程的前引课)时,期末大程题目我和同组的github成员lwaekfjlk 决定写一款基于Verilog语言的游戏。原型是我们两人都非常喜爱的一款游戏——The Binding of Isaac: Rebirth。在三天三夜的奋战后,基本完成了预期目标。由于亲自编写了其中种种,我们深知新手初期使用Verilog语言有多困难。而可悲的是,这又是之后计算机组成课程和体系结构课程所需的!因此,我们将top部分源码放在这里,供同袍们参考。若想引用还请注明出处。 代码部分

LuvLucifer的博客 1385

K Smallest Sums(贪心多路归并+优先队列)

K Smallest SumsYou're given k arrays, each array has k integers. There are kk ways to pick exactly one element in each array and calculate the sum of the integers. Your task is to find the k smallest ...

qq_34942428的博客 725

《活用数据——驱动业务的数分析实战》读书笔记 (实战篇)

第四章、战略分析案例解析         如思维篇所述,分析思路是从研究目的到研究内容的分解过程。因此需要考虑如下两个问题: 战略分析的研究目的 战略分析的研究内容 1、研究目的:战略选择         战略分析的研究目的是帮助企业进行战略选择,选择适合自己的目标市场。需要回答以下两个问题: 市场吸引力:这个市...

Xiaozhu的博客 3698

K Smallest Sums UVA - 11997(优先队列、打表)【详解】

DescribeYou’re given k arrays, each array has k integers. There are k^k ways to pick exactly one element in each array and calculate the sum of the integers. Your task is to find the k smallest sums a...

既然弱小,就只顾变强就是了 508

使用OpenGL加载和显示DXF格式的3D模型文件编程

这样,我们就完成了使用OpenGL加载和显示DXF格式的3D模型文件的编程。通过实现加载函数和绘制回调函数,我们能够读取DXF文件的数据并使用OpenGL绘制出来。请注意,这只是一个简单的例子,仅涵盖了基本的加载和显示功能。在本文中,我们将探讨如何使用OpenGL编程加载和显示DXF(Drawing Exchange Format)格式的3D模型文件。DXF是一种通用的CAD(计算机辅助设计)文件格式,常用于存储和交换2D和3D图形数据。使用OpenGL加载和显示DXF格式的3D模型文件编程。

2301_79331421的博客 413

C++多线程 task--std::promise和std::future

本文主要讲解C++11/14/17中所提供的应用于多线程编程中的Task机制。Task可由如下几部分取得而本文主要讲解std::promise和std::future相关的内容。std::promise和std::future通过一个数据管道进行交流,可以将std::promise看作生产者,std::future看作消费者,其两者形成如下的方式交互std::promise本身是一个模版类,通过std::promise可以像数据管道中设置value,异常和相应的通知信息。std::promise提供了如下接

qls315的博客 1818

UVA11997_K_Smallest_Sums_多路并归_优先队列

本来今天早上才编过用优先队列模拟堆的一道题,结果晚上编又不会了- -,还得照着模版写- - 另外这个题我自己没想出来,去网上搜的解题报告看的 题意是给k组数每组有k个数,然后每组取一个,找前k个最小的和 然后下面是我在别人的博客里搜到的题解: 1. 转载于    z.arbitrary的博客 http://www.cnblogs.com/arbitrary/archive/2013/03

u011343989的专栏 620

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

K Smallest Sums UVA11997(多路归并问题) 优先队列

UVA11997 题意:k 个数组 每个数组 k 个数,每个数组取一个数有k^k种取法构成不同的和,问和的前k小的值。 思路: 要求k组,先考虑2组,a 数组, b数组。 取数方式有k^2 种,要从其中找到最小的k个, 对b数组排序, 可以先求出 a[0] + b[0] , a[1] + b[1] , … , a[k-1] + b[0] 存入优先队列, 之后 依次弹出前k小,同时判断如果b右边还...

Dave_lzw的博客 294

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

557C - Arthur and Table (前缀和)

如果选择L为最后的最长长度,那么大于L的桌腿必须全去除。然后假如此时剩下M条桌腿,长度L的桌腿有num[L]条,如果tmp=num[L]*2-1-M0,就需要在小于L的腿中选择tmp条花费最小的桌腿。 首先把桌腿按长度排序然后预处理前缀和,这样后可以O(1)得到大于L的桌腿的总代价。 然后因为代价的最大值才200,那么维护小于L的每种代价桌腿的数量,按照计数排序的方法选择桌腿去除,再维

Baoli1008的专栏 1086

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

UVa 11235 Frequent Values(RMQ,ST算法)

注意到数列是非递减的,这代表相等的数字一定是挨在一起的。 用a[i]表示数字i所在的段的长度。 用left,right数组维护每个数字所在段左右边界位置。 这样对于查询s~t,right[s]+1~left[t]-1这个子区间全都是完整的段,对这个子区间做RMQ,得到最长的段长度。然后再考虑这个子区间两个边界到s,t的距离。这两个距离也可能是答案。这三个答案的最大值就是最终答案。 要特判s

Baoli1008的专栏 1048

csu 1335 高桥和低桥(树状数组+二分)

输入所有桥的高度后先对桥排序,然后先求出

Baoli1008的专栏 952

Codeforces 547B - Mike and Feet (单调栈)

res[x]表示长度为x区间的答案,那么如果i>j,res[i] 对于每个元素需要找到左边和右边第一个大于这个元素的位置。单调栈可以在O(N)时间内找出所有元素的左右位置,思路就是维护一个数字单调递增的位置序列。具体看代码。 代码: #include #include #include #include #define LL long long #include u

Baoli1008的专栏 947

POJ 1151 Atlantis (线段树+扫描线 求矩形面积并)

经典扫描线题,算法网上有很详细的,这里简单说一下: 把每个矩形拆成两条竖边,标记每条边是左边的还是右边的,把所有的边按x坐标排序。用一个数组cov标记整个y轴每个部分在多少个矩形中,哪些不是。把浮点数离散化。 然后开始扫描:先把答案加上(全部在矩形中的区间的长度和)×(这条边x坐标和前一条边x坐标之差),代表这两条边之间被覆盖的面积,然后这条边如果是左边,就把所覆盖区间的cov数组+1,是右边

Baoli1008的专栏 899

poj 2104 K-th Number(线段树)

求区间第K大数。 线段树每个区间维护一个有序的数组。

Baoli1008的专栏 875

HDU 1873 看病要排队

题目链接:点击打开链接 优先队列模板题: 优先队列自定义

Baoli1008的专栏 847

HDU 4747 Mex (线段树)

本题关键是想到如何转换成区间求和操作。 用mex[i]表示第1到第i个数这个区间的mex值,这样对mex[1]~mex[N]求和,就是所有包含第一个数的区间的mex值和。 包含第一个数的都求完了,可以把第一个删掉。这样mex[i]就变成了第2到第i个数这区间的mex值,同样对2到N这个区间的mex[i]求和,然后一直一个一个删除到最后一个。 删除a[i]会影响哪些区间: 假设i位置

Baoli1008的专栏 820

Codeforces 558D - Guess Your Way Out! II (求区间交,并)

题中给出的每一个区间都可以转化为叶子那层的一个区间,所以步骤就是: 1.对于所有ans=1的区间求区间交,方法很简单就是两个l取最大值,r取最小值,最后答案一定在这里面。 2.对于ans=0的区间,求区间并的补集。方法是用一个pair,对每个区间的左端点附加信息-1,右端点附加信息1,排序后从左往右扫,累加这个附加信息,当累加和等于0时,说明在该点前的所有区间都结束了,那么从这个点到下一个区间

Baoli1008的专栏 778

Codeforces 555C. Case of Chocolate (SET应用)

对于U的操作,能到达的y的上界和x值大于它最接近的操作的y的上界是一样的: 1.如果是L的操作,上界就是那个L操作的y值。 2.如果是U的操作,上界就是这次U操作所能到达的上界。 对于L的操作,则是找y值大于它最近的操作。 所以建立两个map U,L,一个key值是x,一个是y,因为map的lower_bound是按照key值查找的。 对于U操作,结束后U要插入pair(

Baoli1008的专栏 771

UVa 11991 I Can Guess The Data Structure(STL基础)

用stl中的3种数据结构依次去试,注意取之前要判断容器内是否是空的。 代码: #include #include #include using namespace std; #include #include queue Q; stack S; priority_queue P; void init(){ while(!Q.empty()) Q.pop(); wh

Baoli1008的专栏 764

hdu 1199 Color the ball(线段树离散化区间染色)

题目链接:点击打开链接

Baoli1008的专栏 762

zoj 3633 Alice's present(线段树)

首先预处理出每个位置上的数从它开始向右第一个

Baoli1008的专栏 748
上一篇: python 输出重定向
下一篇: uva 1428 Ping pong (树状数组)
Baoli1008
博客等级 码龄12年 70粉丝 293原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值