列表

详情


NC221794. dd爱矩阵

描述

给一个的矩阵,每行各选一个数字,把选出来的n个数字相加,一共有种可行答案,你只要输出前大就行了

输入描述

第一行一个数正整数n(1≤n≤500),表示矩阵大小
接下来n行,每行n个数描述矩阵,矩阵中数字取值范围在[1,500000]内

输出描述

一行,n个数,输出前n大的结果

示例1

输入:

5
6 6 4 4 5
5 6 8 5 7
6 1 6 9 4
4 8 8 1 5
9 2 3 9 3

输出:

40 40 40 40 40

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 721ms, 内存消耗: 4112K, 提交时间: 2021-06-02 17:17:04

#include<bits/stdc++.h>
using namespace std;
const int maxn=500+10;
int a[maxn],ans[maxn];
bool cmp(int x,int y) {return x>y;}
int main() {
	int n,i,j,k;
	scanf("%d",&n);
	for(i=1;i<=n;i++) {
		scanf("%d",&ans[i]);
	}
	sort(ans+1,ans+1+n,cmp);
	for(i=2;i<=n;i++) {
		for(j=1;j<=n;j++) scanf("%d",&a[j]);
		sort(a+1,a+1+n,cmp);
		priority_queue<int>q;
		for(j=1;j<=n;j++) {
			for(k=1;k<=n;k++) {
				q.push(a[j]+ans[k]);
			}
		}
		for(j=1;j<=n;j++) {
			ans[j]=q.top();q.pop();
		}
	}
	for(i=1;i<=n;i++) {
		if(i>1) printf(" ");
		printf("%d",ans[i]);
	}
	printf("\n");
	return 0;
}

上一题