P1392 取数

题目描述 【#

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

思路

        · 先缩小思考范围,仅考虑n=2的情况
         · 每行可自行增序排序
        · 枚举第1,2,3,…,k小的数,第1小由a11+a21开始
        · 若第k小为a1i+a2j,则a1i+1+a2j、a1i+a2j+1要纳入第k+1小的考虑行列
        · 显然待考虑项可用堆维护 考虑由i行扩展至i+1行, 先求出前i行的最小k项和,维护第i+1行与其组合的前k值即可 (from TD)

        先对一二两行进行处理,取前k小的数,再与下一行运算       用优先队列实现

#include<bits/stdc++.h>
using namespace std;
int n,m,k,a[805],b[805],c[805];
struct node{
	int x,a,b;
	bool operator<(const node &y) const
	{ return x>y.x; }
};
priority_queue<node> q;
int main()
{
	scanf("%d%d%d",&n,&m,&k);
	for(int i=1;i<=m;i++) scanf("%d",&a[i]);
	sort(a+1,a+1+m);
	for(int i=2;i<=n;i++)
	{
		for(int j=1;j<=m;j++) scanf("%d",b+j); sort(b+1,b+1+m);
		while(!q.empty()) q.pop();
		for(int j=1;j<=k;j++) q.push((node){a[j]+b[1],j,1});
		for(int j=1;j<=k;j++)
		{
			node x=q.top(); q.pop(); c[j]=x.x;
			if(x.b<m) q.push((node){a[x.a]+b[x.b+1],x.a,x.b+1});
		}
		for(int j=1;j<=k;j++) a[j]=c[j];
	}
	for(int i=1;i<=k;i++) cout<<a[i]<<" ";
	return 0;
}

相关推荐

  1. P1392

    2024-01-12 10:18:02       37 阅读
  2. P1005 [NOIP2007 提高组] 矩阵游戏

    2024-01-12 10:18:02       16 阅读
  3. luogu P1352 没有上司的舞会 详解

    2024-01-12 10:18:02       22 阅读
  4. P1643 完美 题解

    2024-01-12 10:18:02       33 阅读
  5. P1308 统计单词

    2024-01-12 10:18:02       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-12 10:18:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-12 10:18:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-12 10:18:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-12 10:18:02       20 阅读

热门阅读

  1. 2024.1.9力扣每日一题——字符串中的额外

    2024-01-12 10:18:02       32 阅读
  2. eureka ConnectException如何解决

    2024-01-12 10:18:02       34 阅读
  3. React----函数组件和类组件

    2024-01-12 10:18:02       29 阅读
  4. React Hooks useContext 传参数

    2024-01-12 10:18:02       37 阅读
  5. py11-python之正则-re

    2024-01-12 10:18:02       23 阅读
  6. jenkins error No space left on device

    2024-01-12 10:18:02       38 阅读
  7. ebpf学习_incomplete

    2024-01-12 10:18:02       30 阅读
  8. MongoDB聚合:$bucketAuto

    2024-01-12 10:18:02       36 阅读
  9. Python(35):Python3 通过https上传文件和下载文件

    2024-01-12 10:18:02       31 阅读