YYH的积木(NOIP模拟赛Round 6)
题目描述
YYH手上有n盒积木,每个积木有个重量。现在他想从每盒积木中拿一块积木,放在一起,这一堆积木的重量为每块积木的重量和。现在他想知道重量最少的k种取法的重量分别是多少。
输入输出格式
输入格式:
第一行输入一个整数T,表示有T组数据
每组数据的第一行输入两个整数,n,k,意义如题目所描述。
每组数据接下来的n行,第一个整数为mi,表示第i盒积木的数量,在同一行有mi个整数,分别表示每个积木的重量
输出格式:
输出T行,分别为每组数据的答案
首先我们看到这道题的范围,就发现这是一道神奇的题目
DP?那么必须要滚动数组存储状态,不然肯定MLE,
还有没有更简单的做法?
很明显,我们需要维护一个数列的最小的前k个数,有没有什么奇特的数据结构可以帮到我们?
事实上是有的:
TOP1:堆
TOP2:优先队列。
显然,在代码长度允许的情况下,我们肯定选择好打的,(事实证明优先队列会TLE?)
我们将一个盒子的每一个数加上原来的状态(这里需要用到滚动数组存储状态)放入一个堆中,然后如果堆中已有k个元素,就判断是否比最后一个元素大,如果更大,那么就pop第一个元素,再将这个数push进去
然后就能飞快的做出答案啦!
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int h[][],len[],num[];
int n,k,t,f,m;
bool cmp(int a,int b){return a<b;}
int main(){
scanf("%d",&t);
for(int i=;i<=t;i++)
{
memset(h,,sizeof(h));
len[]=;f=;
scanf("%d%d",&n,&k);
for(int j=;j<=n;j++)
{
len[(f^=)]=;
scanf("%d",&m);
for(int kq=;kq<=m;kq++)
{
scanf("%d",&num[kq]);
for(int l=;l<=len[f^];l++)
{
int tmp=num[kq]+h[f^][l];
if(len[f]<k)
{
h[f][++len[f]]=tmp;
push_heap(h[f]+,h[f]+len[f]+,cmp);
}
else if(h[f][]>tmp)
{
pop_heap(h[f]+,h[f]+len[f]+,cmp);
h[f][len[f]]=tmp;
push_heap(h[f]+,h[f]+len[f]+,cmp);
}
}
}
}
sort(h[f]+,h[f]+len[f]+);
for(int i=;i<=k;i++)
{
printf("%d%c",h[f][i],(i==k)?'\n':' ');
}
}
return ;
}
YYH的积木(NOIP模拟赛Round 6)的更多相关文章
- YYH的营救计划(NOIP模拟赛Round 6)
题目描述 “咚咚咚……”“查水表!”原来是查水表来了,现在哪里找这么热心上门的查表员啊!YYH感动的热泪盈眶,开起了门…… YYH的父亲下班回家,街坊邻居说YYH被一群陌生人强行押上了警车!YYH的父 ...
- YYH的球盒游戏(NOIP模拟赛Round 6)
题目描述 YYH有一些总共有种颜色的球,他有颜色的球个.他同样有个盒子,第个盒子能放个球. 他的目标是把这个球按规则放进个盒子里: 对于一个盒子,对于每种颜色的球至多只能放个. 把颜色为的球放进盒子, ...
- YYH的苍天大竹(NOIP模拟赛Round 6)
题目描述 YYH擅长种竹子.今天他收获了一根竹子,准备将这根柱子卖给CHS.这个竹子有n-1个竹节.CHS要求一定要从竹节的地方砍,而且砍成若干段后每一段竹子中最长的一小段竹子和最短的一小段的长度差不 ...
- YYH的王国(NOIP模拟赛Round 6)
题目描述 YYH拥有一个有n个城市的国家,编号为1~n.其中城市i到城市j的路径长度为i和j的最小公倍数.现在YYH想建一些高速公路,使得任意两座城市都能通过高速公路直接或间接到达.建造一条高速公路的 ...
- YYH算组合数(NOIP模拟赛Round 6)
题目描述 YYH手上有一个长度为N的数列,而且这个数列正好能表示为.现在他想知道这个数列的最大公约数是多少,请你帮帮他 输入输出格式 输入格式: 每个数据点包括多组数据,以EOF结束 对于每个数据输入 ...
- 水(NOIP模拟赛Round #10)
题目描述: 小Z有一个长度为的数列.他有次令人窒息的操作,每次操作可以使某个数字或.他当然是希望这些数字的乘积尽量小了.为了简化题目,你只需输出操作完成后的数列即可. ———————————————— ...
- 小红帽的画笔(NOIP模拟赛Round 7)
又到了神奇的模拟赛时间~ 真是丧~ 好吧我们来看看题目 小红帽是Pop star上最著名的人类画家,她可以将任何画出的东西变成真实的物品.赋予她这样神奇能力的正是她手上的画笔. 小红帽每次作画时,都需 ...
- 题(NOIP模拟赛Round #10)
题目描述: 有一张的地图,其中的地方是墙,的地方是路.有两种操作: 给出个地点,询问这个地点中活动空间最大的编号.若询问的位置是墙,则活动空间为:否则活动空间为询问地点通过四联通能到达的点的个数.如果 ...
- 大(NOIP模拟赛Round #10)
题目描述: 小Z有个n个点的高清大图,每个点有且只有一条单向边的出边.现在你可以翻转其中的一些边,使他从任何一个点都不能通过一些道路走回这个点.为了方便,你只需输出方案数对取模即可.当在两个方案中有任 ...
随机推荐
- 小明的存钱计划 南阳acm54
小明的存钱计划 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 小明的零花钱一直都是自己管理.每个月的月初妈妈给小明300元钱,小明会预算这个月的花销,并且总能做到实际花 ...
- ZOJ3640 概率DP
Background If thou doest well, shalt thou not be accepted? and if thou doest not well, sin lieth at ...
- 使用.gitignore忽视项目中的文件/文件夹
在项目开发的过程中,我们经常需要IDE来提高编程效率.然而,不同的IDE会生成各种各样的临时文件.在项目生命周期中,我们往往不需要关注这类文件的变更记录,因而我们是不需要将它们加入到源代码管理器中. ...
- Idea搭建spring framework源码环境
spring的源码目前放在github上,https://github.com/spring-projects/spring-framework 一.安装Git 二.安装Gradle gradle为解 ...
- saltstack特点
目录 saltstack特点 saltstack特点 实时交互 所有的minion机器同时执行命令 no freeloader 每一台salt minion上都装有执行master传来的命令所需要的程 ...
- WPF系列教程——(三)使用Win10 Edge浏览器内核 - 简书
原文:WPF系列教程--(三)使用Win10 Edge浏览器内核 - 简书 在需要显示一些 H5网站的时候自带的WebBrowser总是显示不了,WebBrowser使用的是IE内核,许多H5新特性都 ...
- linux统计分析流量-wireshark
wireshark是一款带界面的开源抓包工具,可以用来对系统流量进行统计分析. 安装 由于wireshark是带界面的,所以一般在界面环境下运行,可以通过yum安装: $ yum install -y ...
- Node应用进程管理器pm2的使用
本文转载自:豆瓣-PM2介绍 更多内容见github上的pm2说明文档pm2 pm2 是一个带有负载均衡功能的Node应用的进程管理器. 当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程 ...
- 孤荷凌寒自学python第六十五天学习mongoDB的基本操作并进行简单封装4
孤荷凌寒自学python第六十五天学习mongoDB的基本操作并进行简单封装4 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十一天. 今天继续学习mongoDB的简单操作 ...
- sources.list
deb http://debian.ustc.edu.cn/ubuntu/ precise main multiverse restricted universe deb http://debian. ...