ACM乐园
Love Me,Love My Code!
posts - 53,  comments - 24,  trackbacks - 0
http://acm.hdu.edu.cn/showproblem.php?pid=1280

有两种方法。注意到最大值不超过5000,所以可以开个10000的数组来存储结果,然后输出即可。另一种方法就是堆的方法。

//方法一:

#include 
<iostream>
#include 
<algorithm>
#include 
<stdlib.h>
using namespace std;

int data[10001],a[3000];

int main()
{
    
int n,m,i,j;
    
while(cin>>n>>m)
    
{
        memset(data,
0,sizeof(data));
        
for(i=0;i<n;i++)
            scanf(
"%d",&a[i]);
        
for(i=0;i<n-1;i++)
            
for(j=i+1;j<n;j++)
                data[a[i]
+a[j]]++;
        
for(i=10000;m;i--)
        
{
            
while(data[i]-- && m)
                cout
<<i<<(--m?' ':'\n');
        }

    }

    
return 0;
}

posted on 2011-04-05 10:34 大大木马 阅读(219) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2011年4月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿(1)

随笔档案(53)

文章档案(2)

搜索

  •  

积分与排名

  • 积分 - 63780
  • 排名 - 351

最新评论

阅读排行榜

评论排行榜