题目传送门

取数

题目描述

在一个n行m列的数阵中,你须在每一行取一个数(共n个数),并将它们相加得到一个和。对于给定的数阵,请你输出和前k小的取数方法。

输入输出格式

输入格式:

第一行,三个数n,m,k。

第2~n+1行,每行m个正整数

输出格式:

一行共k个数,代表在每一行取一个数前k小的加和

输入输出样例

输入样例#1: 复制

3 3 2
1 2 3
6 3 5
4 1 2
输出样例#1: 复制

5 6

说明

对于20%的数据,n≤8

对于100%的数据,n≤800,k≤m≤800


  分析:

  WA了无数次,最后发现就是一个取址符号没打。。。。。。真煞笔。。。

  这个蒟蒻真的懒得写了,如果想看思路就参考一下这里吧,蒟蒻就只上代码了。

  Code:

#include<bits/stdc++.h>
using namespace std;
int n,m,k,a[][];
int size,b[],c,cc;
struct Node{
int x,y,num;
}bdg,h[];
inline void Swap(Node &x,Node &y)
{Node temp=x;x=y;y=temp;}
inline void ins(Node x)
{
h[++size]=x;
int ka=size;
while(ka>){
if(h[ka].num<h[ka>>].num){
Swap(h[ka],h[ka>>]);ka>>=;}
else break;}
}
inline void delet()
{
h[]=h[size--];
int ka=,s=ka<<;
while(s<=size){
if(s<size&&h[s+].num<h[s].num)s++;
if(h[s].num<h[ka].num){
Swap(h[s],h[ka]);ka=s;s=ka<<;}
else break;}
}
inline Node get()
{
Node ret=h[];
delet();return ret;
}
int main()
{
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=m;i++)
scanf("%d",&a[c][i]);
sort(a[c]+,a[c]+m+);
for(int j=;j<=n;j++){
cc=-c;size=;
for(int i=;i<=m;i++)
scanf("%d",&b[i]);
sort(b+,b+m+);
bdg.x=;
for(int i=;i<=k;i++){
bdg.y=i;bdg.num=a[c][]+b[i];ins(bdg);}
for(int i=;i<=k;i++){
bdg=get();
a[cc][i]=bdg.num;
bdg.x++;bdg.num=a[c][bdg.x]+b[bdg.y];
ins(bdg);}
c=-c;}
for(int i=;i<=k;i++)
printf("%d ",a[c][i]);
return ;
}

洛谷P1392 取数 [堆]的更多相关文章

  1. 洛谷 P1392 取数

    题面 在做这道题前,先要会他的弱化版(实际一模一样,只是愚蠢的洛谷评测级别差了一档(睿智如姬无夜)) ----------------------------------弱化版------------ ...

  2. [洛谷P1392] 取数

    无法用复杂状态进行转移时改变计算方式:巧妙的整体考虑:压缩空间优化时间 传送门:$>here<$ 题意 给出一个n*m矩阵,从每一行选一个数加起来,可以得到一个和.易知总共会有$n^n$个 ...

  3. 洛谷P1288 取数游戏II(博弈)

    洛谷P1288 取数游戏II 先手必胜的条件需要满足如下中至少 \(1\) 条: 从初始位置向左走到第一个 \(0\) 的位置,经过边的数目为偶数(包含 \(0\) 这条边). 从初始位置向右走到第一 ...

  4. 洛谷P1288 取数游戏II[博弈论]

    题目描述 有一个取数的游戏.初始时,给出一个环,环上的每条边上都有一个非负整数.这些整数中至少有一个0.然后,将一枚硬币放在环上的一个节点上.两个玩家就是以这个放硬币的节点为起点开始这个游戏,两人轮流 ...

  5. 洛谷P1288 取数游戏II

    题目描述 有一个取数的游戏.初始时,给出一个环,环上的每条边上都有一个非负整数.这些整数中至少有一个0.然后,将一枚硬币放在环上的一个节点上.两个玩家就是以这个放硬币的节点为起点开始这个游戏,两人轮流 ...

  6. 洛谷 p1123 取数游戏【dfs】

    题目链接:https://www.luogu.org/problemnew/show/P1123 转载于:>>>>>> 题目描述 一个N×M的由非负整数构成的数字矩 ...

  7. 洛谷 P1123 取数游戏

    题目描述 一个N×M的由非负整数构成的数字矩阵,你需要在其中取出若干个数字,使得取出的任意两个数字不相邻(若一个数字在另外一个数字相邻8个格子中的一个即认为这两个数字相邻),求取出数字和最大是多少. ...

  8. 洛谷——P1123 取数游戏

    P1123 取数游戏 题目描述 一个N×M的由非负整数构成的数字矩阵,你需要在其中取出若干个数字,使得取出的任意两个数字不相邻(若一个数字在另外一个数字相邻8个格子中的一个即认为这两个数字相邻),求取 ...

  9. P1392 取数[堆]

    题目描述 在一个n行m列的数阵中,你须在每一行取一个数(共n个数),并将它们相加得到一个和.对于给定的数阵,请你输出和前k小的取数方法. 解析 写这题完全自闭. 根本没联想起远古时期做的 P1631 ...

随机推荐

  1. Java反射中method.isBridge() 桥接方法

    桥接方法是 JDK 1.5 引入泛型后,为了使Java的泛型方法生成的字节码和 1.5 版本前的字节码相兼容,由编译器自动生成的方法.我们可以通过Method.isBridge()方法来判断一个方法是 ...

  2. 【BZOJ1598】牛跑步 [A*搜索]

    牛跑步 Time Limit: 10 Sec  Memory Limit: 162 MB[Submit][Status][Discuss] Description BESSIE准备用从牛棚跑到池塘的方 ...

  3. Optimal Milking(POJ2112+二分+Dinic)

    题目链接:http://poj.org/problem?id=2112 题目: 题意:有k台挤奶机,c头奶牛,每台挤奶机每天最多生产m的奶,给你每个物品到其他物品的距离(除了物品到自己本省的距离为0外 ...

  4. 21、python操作redis的模块?

    什么是redis? redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(s ...

  5. cuda中的二分查找

    使用背景 通常,在做高性能计算时,我们需要随机的连接某些点.这些点都具有自己的度量值,显然,度量值越大的值随机到的概率就会越大.因此,采用加权值得方法: void getdegreeSum(DG *g ...

  6. Python学习笔记 - day11 - Python操作数据库

    MySQL的事务 MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关,MySQL的两种引擎如下: 1.MyISAM:不支持事务,用于只读程序提高性能 2.InnoDB:支持ACID ...

  7. win10安装提示“我们无法创建新的分区”

    今日于笔记本安装win10时突然出现提示:我们无法创建新的分区.网上搜了不少建议,尝试了都无果. 由于我的笔记本是固态硬盘与机械硬盘混合,所以情况可能更加特殊. 最后成功的方法是: 1. 先将Win1 ...

  8. 1833: [ZJOI2010]count 数字计数——数位dp

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1833 省选之前来切一道裸的数位dp.. 题意 统计[a,b]中0~9每个数字出现的次数(不算 ...

  9. Dev的js智能提示

    VS中"工具"->"选项"->"文本编辑器"->"JavaScript"->"Inte ...

  10. JS实现判断滚动条滚到页面底部并执行事件的方法

    需要了解三个dom元素,分别是:clientHeight.offsetHeight.scrollTop. clientHeight:这个元素的高度,占用整个空间的高度,所以,如果一个div有滚动条,那 ...