zoukankan      html  css  js  c++  java
  • poj 2442 Sequence(优先队列)

    题目:http://poj.org/problem?id=2442

    题意:给你n*m的矩阵,然后每行取一个元素,组成一个包含n个元素的序列,一共有n^m种序列,

    让你求出序列和最小的前n个序列的序列和。

              又是一个机智的题

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cstdlib>
     5 #include<stack>
     6 #include<queue>
     7 #include<iomanip>
     8 #include<cmath>
     9 #include<map>
    10 #include<vector>
    11 #include<algorithm>
    12 using namespace std;
    13 
    14 int a[20000],b[20000];
    15 int main()
    16 {
    17 
    18     priority_queue<int, vector<int>,less<int> >maxh;
    19     int t,m,n,i,j;
    20     cin>>t;
    21     while(t--)
    22     {
    23         cin>>m>>n;
    24         for(i=0; i<n; i++)
    25         cin>>a[i];
    26         sort(a,a+n); //
    27         m--;
    28         while(m--)
    29         {
    30             for(i=0; i<n; i++)
    31             {
    32                 cin>>b[i];
    33                 maxh.push(a[0]+b[i]); //先让一个最小的与b加,做对比
    34             }
    35             sort(b,b+n); //排序
    36             for(i=1; i<n; i++)
    37             for(j=0; j<n; j++)
    38             {
    39                 if(a[i]+b[j]>maxh.top()) //如果第j个都大了,那后面的更大了
    40                 break;
    41                 maxh.pop();
    42                 maxh.push(a[i]+b[j]);
    43             }
    44             for(i=n-1; i>=0; i--)
    45             {
    46                 a[i]=maxh.top(); //a数组是前k列里的组合的最小值
    47                 maxh.pop();
    48             }
    49         }
    50         for(i=0; i<n-1; i++)
    51         printf("%d ",a[i]);  
    52         if(n>=1)
    53         printf("%d
    ",a[i]);
    54     }
    55     return 0;
    56 }
  • 相关阅读:
    EXTJS 基本使用
    EXTJS 常用控件的使用
    EXTJS 验证与表单提交
    EXTJS 常用方法
    禁用USB移动盘的方法
    常用sql 函数练习示例
    .Net 中的反射(反射特性) Part.3
    Delphi調用.NET的WebService
    c#写的串口通讯
    打印控制
  • 原文地址:https://www.cnblogs.com/bfshm/p/3272610.html
Copyright © 2011-2022 走看看