正题

题目链接:http://www.51nod.com/Challenge/Problem.html#problemId=1821


题目大意

\(n\)个可重集合,\(T\)次询问,询问将集合\(S_x\)和一个选出大小为\(k\)的\(S_y\)的子集合并成的独立集\(S'\)满足能够找到一个最大的\(z\)使得对于任意的正整数\(i\in [1,z]\)都存在一个\(S'\)的子集和为\(i\)。

\(1\leq n,m_i\leq 1000,1\leq T\leq 10000\)


解题思路

考虑我们已经拼出了一个\(z\),那么我们如果加入一个\(\leq z+1\)的数\(x\)那么就可以使得上限变成\(z+x\)。

所以可以考虑贪心,因为第一个集合没有限制我们就优先选择第一个集合里的数,直到不能选择我们就选择第二个集合里的直到能够继续选择第一个集合里的。

排好序然后开个栈维护就好了。

时间复杂度\(O(nm\log m+Tm)\)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1100;
ll n,T,m[N],s[N],a[N][N];
signed main()
{
scanf("%lld",&n);
for(ll i=1;i<=n;i++){
scanf("%lld",&m[i]);
for(ll j=1;j<=m[i];j++)
scanf("%lld",&a[i][j]);
sort(a[i]+1,a[i]+1+m[i]);
}
scanf("%lld",&T);
while(T--){
ll x,y,k,z=1,top=0,sum=1,flag=0;
scanf("%lld%lld%lld",&x,&y,&k);
for(ll i=1;i<=m[x];i++){
while(z<=m[y]&&a[y][z]<=sum)s[++top]=a[y][z],z++;
while(sum<a[x][i]){
if(!k||!top){flag=1;break;}
sum+=s[top];k--;top--;
}
if(flag)break;sum+=a[x][i];
}
while(k&&top)sum+=s[top],top--,k--;
printf("%lld\n",sum-1);
}
return 0;
}

51nod1821-最优集合【贪心】的更多相关文章

  1. 51nod1821 最优集合 贪心

    首先考虑一个集合的最大优美值怎么求出 考虑新增一个数,假设我们现在的优美值已经达到了$V$,那么只需要一个$[1, V + 1]$的数就可以使$V$达到更大 为了保证能添加尽可能多的数进来,我们这么构 ...

  2. 51NOD 1821 最优集合 栈

    1821 最优集合   一个集合S的优美值定义为:最大的x,满足对于任意i∈[1,x],都存在一个S的子集S',使得S'中元素之和为i. 给定n个集合,对于每一次询问,指定一个集合S1和一个集合S2, ...

  3. CF 672C Recycling Bottles[最优次优 贪心]

    C. Recycling Bottles time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  4. 51NOD 1821 最优集合 [并查集]

    传送门 题意: 一个集合S的优美值定义为:最大的x,满足对于任意i∈[1,x],都存在一个S的子集S',使得S'中元素之和为i. 给定n个集合,对于每一次询问,指定一个集合S1和一个集合S2,以及一个 ...

  5. 51nod 1821 最优集合(思维+单调队列)

    题意:一个集合S的优美值定义为:最大的x,满足对于任意i∈[1,x],都存在一个S的子集S',使得S'中元素之和为i. 给定n个集合,对于每一次询问,指定一个集合S1和一个集合S2,以及一个数k,要求 ...

  6. 51Nod - 1821:最优集合 (求第一个不能被表示为多个数的和的数)(不错的动脑题)

    一个集合S的优美值定义为:最大的x,满足对于任意i∈1,x1,x,都存在一个S的子集S',使得S'中元素之和为i. 给定n个集合,对于每一次询问,指定一个集合S1和一个集合S2,以及一个数k,要求选择 ...

  7. 胡小兔的OI日志3 完结版

    胡小兔的 OI 日志 3 (2017.9.1 ~ 2017.10.11) 标签: 日记 查看最新 2017-09-02 51nod 1378 夹克老爷的愤怒 | 树形DP 夹克老爷逢三抽一之后,由于采 ...

  8. 【learning】加权拟阵与贪心

    首先.. 这篇东西的话算是一个关于拟阵部分知识的小总结,有些语言相对来说偏向便于理解方面,所以可能..有一些说法会不是那么严谨大概是这样 ​ 一些概念 线性无关:一组数据中没有一个量可以写成其余量的线 ...

  9. 1572: [Usaco2009 Open]工作安排Job[贪心]

    Description Farmer John 有太多的工作要做啊!!!!!!!!为了让农场高效运转,他必须靠他的工作赚钱,每项工作花一个单位时间. 他的工作日从0时刻开始,有1000000000个单 ...

随机推荐

  1. js清空input file的值

    原文:js清空input file的值 在做选择本地图片上传的功能时遇到一个问题,第一次点file按钮选择图片完成会触发onchange事件,获取文件后动态在界面上创建img标签展示,但把创建的img ...

  2. SpringCloud(5)之分布式锁实现

    01为什么用分布式锁 在讨论这个问题之前,我们先来看一个业务场景:系统A是一个电商系统,目前是一台机器部署,系统中有一个用户下订单的接口,但是用户下订单之前一定要去检查一下库存,确保库存足够了才会给用 ...

  3. .Net Core 踩坑记录--无法逐步调试类库文件

    前提 新建类库 在新项目中引用该类库 将类库对应的.PDB文件 拷贝至新项目的bin文件夹下 结果 无法进行跟踪调试 狗带 分析与解决 1: 打开 工具-->选项-->调试 2: 常规-- ...

  4. SpringBoot获取所有接口的路由

    @Autowired WebApplicationContext applicationContext; @RequestMapping(value = "v1/getAllUrl" ...

  5. HDFS简介及基本概念

    (一)HDFS简介及其基本概念   HDFS(Hadoop Distributed File System)是hadoop生态系统的一个重要组成部分,是hadoop中的的存储组件,在整个Hadoop中 ...

  6. 怎样在Qt中建立使用动态链接库

    参考网址: https://blog.csdn.net/q496713258/article/details/6990837 qt 的学习网址: http://c.biancheng.net/view ...

  7. Spring详解------概述

    1.什么是 Spring ? Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2E ...

  8. Struts2之Json插件的使用

    时间:2017-1-15 02:27 --普通方式处理异步请求:    ServletActionContext.getResponse().getWriter().print("aa&qu ...

  9. pgsql日期树数值类型指定与介绍

    http://www.postgres.cn/docs/9.3/datatype-net-types.html#DATATYPE-INET  文档有详细的pgsql介绍 使用案例: SELECT to ...

  10. tcmalloc jemalloc glibc内存分配管理模块性能测试对比

    tcmalloc是谷歌提供的内存分配管理模块 jemalloc是FreeBSD提供的内存分配管理模块 glibc是Linux提供的内存分配管理模块 并发16个线程,分配压测3次,每次压15分钟,可以看 ...