STL heap应用
题目:http://poj.org/problem?id=2442
题目大意:给出一个n×m的矩阵,从没一行拿出一个组成新的序列, 则一共有n^m方个序列,输出这n^m序列中序列和最小的前m个序列的和。
思路:要求的是最小的前n个和,所以想到可能维护n个数据就够了,而且也觉得用这n
个里的最大值来当拦路虎。 但是还是没想到怎么解。 最后看了别人的阶梯报告。忽然大悟。
可以两行两行处理,步骤:
1:将第一行放入sum[m]数组中并排序;
2:将下一行row[] ,用第0个元素与sum[0..m - 1]相加并放到temp[0..m-1] 中
3:利用temp建立大根堆
4:对于前行的第1到m-1个元素i,枚举sum[0..m-1]并相加,
5:将temp升序放入sum中
6:循环2,3,4,5直到第n行
什么时候我能自己想到呢!!!!!!!
提交情况:wa 1次 数组开小了
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define MAXN 110
#define MAXM 2010
int n, m;
int ans[MAXM];
int temp[MAXM];
int row[MAXM];
int main(){
}