两数和的范围2~10000,用计数排序暴力枚举
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int NM=10000;
int a[3005];
int b[NM+5];
int main()
{
int i,j,n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(b,0,sizeof(b));
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
b[a[i]+a[j]]++;
}
for(i=NM;i>0&&m;i--)
{
if(b[i])
{
for(j=0;j<b[i]&&m;j++)
{
m--;
printf("%d",i);
if(m>0) printf(" ");
}
}
}
printf("\n");
}
return 0;
}