当前位置: 首页 > news >正文

K Smallest Sums(多路合并)

问题 E: K Smallest Sums(多路合并)

时间限制: 1.000 Sec 内存限制: 128 MB

题目描述

给定 k 个数组,每个数组中都有 k 个整数。

从每个数组中各选取一个元素,一共可以形成 kk 种不同的组合方式,每种组合的和为所选元素之和。

你的任务是找出所有这些组合中 最小的 k 个和,并按升序输出。

输入

输入包含若干组测试数据。

每组数据的格式如下:

第一行包含一个整数 k(2≤k≤750);

接下来的 k 行,每行包含 k 个正整数,表示一个数组;

每个整数不超过 1,000,000。

输出

对于每组测试数据,输出 最小的 k 个和,按升序排列,用空格分隔。

样例输入
3 1 8 5 9 2 5 10 7 6 2 1 1 1 2
样例输出
9 10 12 2 2

我们分析这个问题,直接能想到差分计算大小,然而不同的组合不好实现。利用递推/递归思想,我们不妨改变为每次把k个小数和前面的合并,贪心思想考虑到和下一个合并的一定是上一个的前k小的数,接下来对于a1,a2,ak,b1,b2,bk,先按a数组和b0合并,每次遍历到某个,在优先队列里面插入a+bi+1,从而保证能在k次内得到k个最小数

代码实现如下:

#include <iostream> #include <vector> #include <algorithm> #include <vector> #include <cmath> #include <queue> #include <set> #include <cstring> #include <string> #include <climits> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int n; while (cin >> n) { vector<vector<int>> a(n, vector<int>(n)); for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) cin >> a[i][j]; for (int i = 0; i < n; i++) { sort(a[i].begin(), a[i].end()); } // 优先队列默认大根堆,最大值在堆顶 vector<int> A(n); for(int i=0;i<n;i++)A[i]=a[0][i]; for (int i = 1; i < n; i++) { priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq; for(int j=0;j<n;j++)pq.push({A[0]+a[i][j],j}); vector<int> res; vector<int> pos(n,0); for(int k=0;k<n;k++) { auto [x,y]=pq.top(); pq.pop(); res.push_back(x); pos[y]++; if(pos[y]<n)pq.push({A[pos[y]]+a[i][y],y}); } A=res; } for(int i=0;i<n;i++)cout<<A[i]<<" "; cout<<"\n"; } return 0; }
http://www.jsqmd.com/news/958524/

相关文章:

  • 《明月别枝》小说|下载|txt
  • 选AI时代企业信源管理方案时,先把合规与全域覆盖放在前面
  • 用LangChain重构期货研报分析流:1天搭建可自动抓取、归因、生成交易建议的AI工作台
  • 深度解析文件分析利器:Detect-It-Easy专业逆向工具完全指南
  • 别再死磕NRF24L01了!手把手教你用安信可NF-02模组(Si24R1)实现低成本替换(附完整驱动代码)
  • 小程序毕设项目:基于微信小程序的博物馆文创产品销售推荐系统基于springboot+微信小程序的博物馆文创系统的设计与实现 (源码+文档,讲解、调试运行,定制等)
  • 判别线性相关的七大定理(理解版)
  • 中国取暖器工厂主要分布在哪里?
  • 2026年当前浙江金属圆盘锯优质厂家推荐与选型深度解析 - 2026年企业资讯
  • Cesium for Unity 完整指南:5个核心技巧构建地理空间3D应用
  • 安卓虚拟摄像头实战指南:3种拦截机制与完整视频替换方案
  • 根据context,设置动态提示词
  • 2026泸州环保全屋定制厂家评测:泸州川渝全屋定制厂家/泸州成品家具/泸州整家全屋定制/泸州新中式全屋定制/泸州酒店办公家具定制/选择指南 - 优质品牌商家
  • 告别代码异味!用PMD插件在IntelliJ IDEA里一键扫描你的Java项目(附自定义规则实战)
  • Java 枚举 Enum 三大实战场景:状态定义、策略模式、接口统一返回码
  • OpenCore Legacy Patcher:让旧款Mac重获新生的终极完整教程
  • 企业服务器数据备份与恢复完整方案(运维兜底核心)
  • JVM 内存模型深度解析:从原理到实战调优
  • 在Apple Silicon Mac上部署原生ARM64 Android模拟器的技术实现与性能分析
  • 从Modbus到Profibus:聊聊RS-485/422这些老伙计在主流工业协议里的那些事儿
  • 推荐靠谱的房屋装修公司 - myqiye
  • 3个专业技巧让你掌握MegSpot:跨平台视觉分析终极指南
  • 智能汽车AI工具整合不是选型问题,而是时间窗口问题:2024Q3起ECU算力认证新规倒逼重构的4大技术支点
  • Node.js 架构演进大师:从事件循环到现代服务端范式
  • 2026乐山门窗厂技术实测:宜宾哪家门窗厂好/宜宾哪家门窗厂性价比高/宜宾哪家门窗好看/宜宾哪里有门窗厂/宜宾定制门窗/选择指南 - 优质品牌商家
  • AI智能体开发从入门到落地全攻略核心框架选型常见坑点规避及实操干货分享
  • DTD 属性:定义文档类型与验证结构的重要元素
  • 【计算机毕业设计案例】基于springboot+微信小程序的博物馆文创系统的设计与实现(程序+文档+讲解+定制)
  • 3分钟搞定:用BetterJoy让Switch控制器在PC上完美运行
  • 别再傻傻分不清!一张图搞懂内存、硬盘、缓存(RAM/ROM/Cache)在电脑里到底怎么干活