• 取数


    题目描述

    在一个n行m列的数阵中,你须在每一行取一个数(共n个数),并将它们相加得到一个和。对于给定的数阵,请你输出和前k小的取数方法。

    输入输出格式

    输入格式:

    第一行,三个数n,m,k。

    第2~n+1行,每行m个正整数

    输出格式:

    一行共k个数,代表在每一行取一个数前k小的加和

    输入输出样例

    输入样例#1: 复制
    3 3 2
    1 2 3
    6 3 5
    4 1 2
    
    输出样例#1: 复制
    5 6

    说明

    对于20%的数据,n≤8

    对于100%的数据,n≤800,k≤m≤800

    首先,先来考虑两行的,假设每行n个,最小的一定是a[1]+b[1],然后就有两种可能了,可能a[2]+b[1],也可能a[1]+b[2],所以两个都放进堆里,(小根堆,优先队列也是可以的,不过好像比堆要慢一点)

    这样的话可能会入堆多次,就标记一下,如果标记为0,则i,j都可以加1,否则只有j能加1,就不会重复了,做一次输出一个,如果cnt==n,就做完了。

    然后就是多行的了,多行的可以看做是两行做一遍结果用重新作为一行,开始把第一行与第二行做一遍,把结果放在第二行里,枚举1-n-1行,最后输出第n行前k个数即可。

    5.30  随笔 over

  • 相关阅读:
    Docker
    Docker
    VIM
    Python
    Python
    VIM
    Python
    其他
    Java
    Java
  • 原文地址:https://www.cnblogs.com/ZY2510998968/p/9114165.html
Copyright © 2020-2023  润新知