[uva11997]k个最小和
一个k*k的矩阵,每行选取一个数相加则得到一个和,求最小的前k个和。
k<=750
已知前m行最小的前k个和d[1]…d[k],则前m+1行最小的前k个和都必定是d[i](i<=k)+a[m+1][x]。排序,枚举x,用优先队列处理。
学会了个小技巧:
node形式的优先队列,想直接插入元素组成node
struct node里加一句node (int sum,int b):sum(sum),b(b) {} 实际调用:q.push(node(sum,b));
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5 #include<algorithm> 6 #include<cmath> 7 #include<vector> 8 #include<map> 9 #include<queue> 10 using namespace std; 11 12 const int K=800; 13 int k,a[K][K]; 14 bool cmp(int x,int y){return x<y;} 15 16 struct node{ 17 int sum,b; 18 node (int sum,int b):sum(sum),b(b) {} 19 bool operator < (const node &x) const { 20 return sum > x.sum; 21 } 22 }; 23 24 priority_queue<node> q; 25 26 void my_merge(int *A,int *B) 27 { 28 while(!q.empty()) q.pop(); 29 for(int i=1;i<=k;i++) q.push(node(A[i]+B[1],1)); 30 for(int i=1;i<=k;i++) 31 { 32 node x=q.top();q.pop(); 33 A[i]=x.sum; 34 if(x.b<=k-1) q.push(node(x.sum-B[x.b]+B[x.b+1],x.b+1)); 35 } 36 } 37 38 int main() 39 { 40 // freopen("a.in","r",stdin); 41 // freopen("a.out","w",stdout); 42 43 while(scanf("%d",&k)!=EOF) 44 { 45 for(int i=1;i<=k;i++) 46 for(int j=1;j<=k;j++) 47 scanf("%d",&a[i][j]); 48 49 sort(a[1]+1,a[1]+k+1,cmp); 50 for(int i=1;i<k;i++) 51 { 52 sort(a[i+1]+1,a[i+1]+k+1,cmp); 53 my_merge(a[1],a[i+1]); 54 } 55 printf("%d",a[1][1]); 56 for(int i=2;i<=k;i++) printf(" %d",a[1][i]);printf("\n"); 57 } 58 59 return 0; 60 }
转载于:https://www.cnblogs.com/KonjakJuruo/p/9459372.html
[uva11997]k个最小和相关推荐
- 77. Leetcode 1439. 有序矩阵中的第 k 个最小数组和 (堆-技巧二-多路归并)
技巧二 - 多路归并其实这个技巧,叫做多指针优化可能会更合适,只不过这个名字实在太过朴素且容易和双指 针什么的混淆,因此我给 ta 起了个别致的名字 - 多路归并.多路体现在:有多条候选路线.代码上, ...
- 选择问题(求第k个最小元素)
什么是选择问题 划分的思路 Lomuto 划分 利用划分求第k小元素 C语言实现 改进 参考资料 什么是选择问题 选择问题(selection problem)是求一个n个数列表的第k个最小元素的问题 ...
- C语言在二叉搜索树找到第k个最小元素(附完整源码)
C语言在二叉搜索树找到第k个最小元素 C语言在二叉搜索树找到第k个最小元素完整源码(定义,实现,main函数测试) C语言在二叉搜索树找到第k个最小元素完整源码(定义,实现,main函数测试) #in ...
- 786. 第 K 个最小的素数分数
786. 第 K 个最小的素数分数 给你一个按递增顺序排序的数组 arr 和一个整数 k .数组 arr 由 1 和若干 素数 组成,且其中所有整数互不相同. 对于每对满足 0 < i < ...
- 二叉搜索树中第k大元素_二叉搜索树中第K个最小元素
二叉搜索树中第k大元素 Problem statement: 问题陈述: Find the k-th smallest element in a given binary search tree (B ...
- 120 - 算法 -找到n个无序数中的 第k个最小的数 快排的变体
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <cstdio> #include <cmath ...
- leetcode 786 第K个最小的素数分数
https://leetcode-cn.com/problems/k-th-smallest-prime-fraction/ 题目 给你一个按递增顺序排序的数组arr和一个整数k.数组arr由1和若干 ...
- python面试题-输入一个由n个大小写字母组成的字符,按Ascii码值从小到大排序,查找字符串中第k个最小Ascii码值的字母
题目: 输入一个由n个大小写字母组成的字符,按Ascii码值从小到大排序,查找字符串中第k个最小Ascii码值的字母(k>=1) 输入要求: 第一行输入大小写组成的字符串 第二行输入k, k必须 ...
- 力扣786. 第 K 个最小的素数分数(自定义排序方式)?
786. 第 K 个最小的素数分数 - 力扣(LeetCode) (leetcode-cn.com) class Solution {public int[] kthSmallestPrimeFrac ...
- 786. 第 K 个最小的素数分数【我亦无他唯手熟尔】
786. 第 K 个最小的素数分数 786. 第 K 个最小的素数分数 题解 786. 第 K 个最小的素数分数 难度 困难 给你一个按递增顺序排序的数组 arr 和一个整数 k .数组 arr 由 ...
最新文章
- 5页面返回上个页面定位_5个步骤,画好页面流程图
- UITableViewCell有关处理touch事件的问题
- 设置select默认值
- 基于JavaSpringmvc+myabtis+html的鲜花商城系统设计和实现
- 可解释性与deep learning的发展
- GateSvr的设计2
- python2 和 python3 在print时的细微差别 (sep等操作)
- Android 官方命令深入分析之android
- 推荐: SQL Server Management Express Edition插件
- php无限级回复页面如何嵌套,php无限级评论嵌套实现代码
- android 屏幕分辨率获取,Android获取屏幕分辨率的三种方法
- JWT © pepsi-wyl
- 古代物流是如何进行的?
- 如何快速在Ubuntu18.04.1上安装k8s1.20的简明教程
- cs231n计算机视觉课程笔记
- html和css实现导航栏样式
- IMX6 GT9XX 10.1寸触摸屏移植
- Kafka 生产者数据安全(ACK机制,ACK时机,ACK应答机制,故障处理,Exactly Once)
- 【PyTorch】torch.mean(), dim=0, dim=1
- 多个Word文档,多张图片转PDF方式实现
热门文章
- Java 调用gc语句_Java GC 、引用
- Cocos2d-xV3.17.2 win32平台模板源码详注
- 游戏筑基开发之函数指针及main函数利用指针传参(C语言)
- 华为 “OSPF” 被动接口配置
- 华三 h3c ospf、rip 路由引入和路由策略
- Kubernetes之集群环境搭建
- 《Cacti实战》——2.3 Cacti的安装与配置
- 用tomcat搭建https
- C/C++程序员面试宝典-2
- Unity LineRender 与 Trail Renderer 组件使用指南