一个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个最小和相关推荐

  1. 77. Leetcode 1439. 有序矩阵中的第 k 个最小数组和 (堆-技巧二-多路归并)

    技巧二 - 多路归并其实这个技巧,叫做多指针优化可能会更合适,只不过这个名字实在太过朴素且容易和双指 针什么的混淆,因此我给 ta 起了个别致的名字 - 多路归并.多路体现在:有多条候选路线.代码上, ...

  2. 选择问题(求第k个最小元素)

    什么是选择问题 划分的思路 Lomuto 划分 利用划分求第k小元素 C语言实现 改进 参考资料 什么是选择问题 选择问题(selection problem)是求一个n个数列表的第k个最小元素的问题 ...

  3. C语言在二叉搜索树找到第k个最小元素(附完整源码)

    C语言在二叉搜索树找到第k个最小元素 C语言在二叉搜索树找到第k个最小元素完整源码(定义,实现,main函数测试) C语言在二叉搜索树找到第k个最小元素完整源码(定义,实现,main函数测试) #in ...

  4. 786. 第 K 个最小的素数分数

    786. 第 K 个最小的素数分数 给你一个按递增顺序排序的数组 arr 和一个整数 k .数组 arr 由 1 和若干 素数  组成,且其中所有整数互不相同. 对于每对满足 0 < i < ...

  5. 二叉搜索树中第k大元素_二叉搜索树中第K个最小元素

    二叉搜索树中第k大元素 Problem statement: 问题陈述: Find the k-th smallest element in a given binary search tree (B ...

  6. 120 - 算法 -找到n个无序数中的 第k个最小的数 快排的变体

    #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <cstdio> #include <cmath ...

  7. leetcode 786 第K个最小的素数分数

    https://leetcode-cn.com/problems/k-th-smallest-prime-fraction/ 题目 给你一个按递增顺序排序的数组arr和一个整数k.数组arr由1和若干 ...

  8. python面试题-输入一个由n个大小写字母组成的字符,按Ascii码值从小到大排序,查找字符串中第k个最小Ascii码值的字母

    题目: 输入一个由n个大小写字母组成的字符,按Ascii码值从小到大排序,查找字符串中第k个最小Ascii码值的字母(k>=1) 输入要求: 第一行输入大小写组成的字符串 第二行输入k, k必须 ...

  9. 力扣786. 第 K 个最小的素数分数(自定义排序方式)?

    786. 第 K 个最小的素数分数 - 力扣(LeetCode) (leetcode-cn.com) class Solution {public int[] kthSmallestPrimeFrac ...

  10. 786. 第 K 个最小的素数分数【我亦无他唯手熟尔】

    786. 第 K 个最小的素数分数 786. 第 K 个最小的素数分数 题解 786. 第 K 个最小的素数分数 难度 困难 给你一个按递增顺序排序的数组 arr 和一个整数 k .数组 arr 由 ...

最新文章

  1. 5页面返回上个页面定位_5个步骤,画好页面流程图
  2. UITableViewCell有关处理touch事件的问题
  3. 设置select默认值
  4. 基于JavaSpringmvc+myabtis+html的鲜花商城系统设计和实现
  5. 可解释性与deep learning的发展
  6. GateSvr的设计2
  7. python2 和 python3 在print时的细微差别 (sep等操作)
  8. Android 官方命令深入分析之android
  9. 推荐: SQL Server Management Express Edition插件
  10. php无限级回复页面如何嵌套,php无限级评论嵌套实现代码
  11. android 屏幕分辨率获取,Android获取屏幕分辨率的三种方法
  12. JWT © pepsi-wyl
  13. 古代物流是如何进行的?
  14. 如何快速在Ubuntu18.04.1上安装k8s1.20的简明教程
  15. cs231n计算机视觉课程笔记
  16. html和css实现导航栏样式
  17. IMX6 GT9XX 10.1寸触摸屏移植
  18. Kafka 生产者数据安全(ACK机制,ACK时机,ACK应答机制,故障处理,Exactly Once)
  19. 【PyTorch】torch.mean(), dim=0, dim=1
  20. 多个Word文档,多张图片转PDF方式实现

热门文章

  1. Java 调用gc语句_Java GC 、引用
  2. Cocos2d-xV3.17.2 win32平台模板源码详注
  3. 游戏筑基开发之函数指针及main函数利用指针传参(C语言)
  4. 华为 “OSPF” 被动接口配置
  5. 华三 h3c ospf、rip 路由引入和路由策略
  6. Kubernetes之集群环境搭建
  7. 《Cacti实战》——2.3 Cacti的安装与配置
  8. 用tomcat搭建https
  9. C/C++程序员面试宝典-2
  10. Unity LineRender 与 Trail Renderer 组件使用指南