题目意思
给你两个数N,M,接着给你N个数,然后让你求这N个数两两相加的和的前m大个数。
解题思路
就是一个暴力加快排,将N个数两两相加的和进行排序输出前m个即可。
代码部分
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue>
#include <math.h>
#define ll long long
using namespace std;
const int maxn=5000000;
int sum[maxn];
int a[3050];
int cmp(int a,int b)
{
return a>b;
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=0; i<n; i++)
{
scanf("%d",&a[i]);
}
int k=0;
for(int i=0; i<n; i++)
{
for(int j=i+1; j<n; j++)
{
sum[k++]=a[i]+a[j];
}
}
int con=k;
sort(sum,sum+con,cmp);
for(int i=0; i<m-1; i++)
{
printf("%d ",sum[i]);
}
printf("%d\n",sum[m-1]);
}
return 0;
}