[POI2007]砝码Odw

2023-11-20

看这数据范围就不太可DP的样子……考虑贪心

首先注意到题目里有对于任意两个砝码其中一个是另一个质量整数倍的条件,所以砝码质量的种类不超过log INF

考虑按质量从小到大把砝码往容器里放,这样的话所有的砝码和容器的质量都可以除以当前砝码质量然后下取整,砝码的质量都是整数倍,而对于容器,被下取整掉那部分是没有用的,因为已经没有比当前砝码更小的砝码了,所以那部分不可能被填满

那么我们让当前砝码优先去填满用后边的砝码不可能填满的部分,也就是每个容器剩余体积模下一个砝码的质量的部分(体积除以质量什么鬼),这样肯定是最优的,如果把这些部分都填满了还有剩余砝码,那么我们把他们往小的里尽量塞,因为如果你往大的里塞可能导致大的塞不下,而往小的里塞的话大的还是可能能放大的里

复杂度O(n log INF)

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<cmath>
#include<algorithm>
#include<iomanip>
#include<vector>
#include<map>
#include<set>
#include<bitset>
#include<queue>
#include<stack>
using namespace std;
#define MAXN 100010
#define MAXM 1010
#define INF 1000000000
#define MOD 1000000007
#define eps 1e-8
#define ll long long
int w[MAXN],p[MAXN];
int v[MAXN],c[MAXN];
int tot;
int n,m;
int ans;
int main(){
	int i,j;
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++){
		scanf("%d",&w[i]);
	}
	for(i=1;i<=m;i++){
		scanf("%d",&p[i]);
	}
	sort(w+1,w+n+1);
	sort(p+1,p+m+1);
	for(i=1;i<=m;i++){
		if(p[i]!=p[i-1]){
			v[++tot]=p[i];
			c[tot]=1;
		}else{
			c[tot]++;
		}
	}
	for(i=1;i<=tot;i++){
		for(j=1;j<=n;j++){
			w[j]/=v[i];
		}
		for(j=tot;j>=i;j--){
			v[j]/=v[i];
		}
		if(i!=tot){
			for(j=1;j<=n;j++){
				int t=min(w[j]%v[i+1],c[i]);
				c[i]-=t;
				w[j]-=t;
				ans+=t;
			}
		}
		for(j=1;j<=n;j++){
			int t=min(w[j],c[i]);
			c[i]-=t;
			w[j]-=t;
			ans+=t;
		}
	}
	printf("%d\n",ans);
	return 0;
}

/*

*/


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[POI2007]砝码Odw 的相关文章

  • 区间图着色问题

    这是算法导论贪心算法一章的一个习题 题目描述 假定有一组活动 我们需要将它们安排到一些教室 任意活动都可以在任意教室进行 我们希望使用最少的教室完成所有的活动 设计一个高效的贪心算法求每个活动应该在哪个教室进行 这个问题称为区间图着色问题
  • POJ--2709:Painter (贪心)

    1 题目源地址 http poj org problem id 2709 2 解题思路 每个颜料盒可能有3 12种颜色 其中每种颜色50ml 任意三种颜色 假设每种颜色Xml 可以混合出Xml的灰色 现在给出所需颜色的种数N 给出N个值分别
  • 消灭兔子【贪心+堆】

    题目链接 51nod 1191 消灭兔子 兔子这么可爱 怎么能消灭呢 我们可以用贪心的办法来解决这个问题 因为每个箭只能使用一次 所以 我们将兔子血量从高往低排列 先做掉高血量兔子 然后再看低血量兔子 保证了伤害高但是价值小的武器假如在之前
  • Polycarp and Div 3【Codeforces Round #496 (Div. 3)【D题】】【贪心】

    应该说是今天凌晨的吧 第一次打Code Forces 懵懵懂懂的 不过感觉还是良好 做了几道签到题 难题还是没有那个水准去做 Polycarp likes numbers that are divisible by 3 He has a h
  • New Year and Social Network【Hello 2020 F】【拓扑+LCA+贪心】

    题目链接 看到比赛的时候zzq大聚聚用了LCT做的 在线 首先 我们可以发现 两棵大小相同 构造形状不同的树 一定是可以用另一棵树的边来维持这棵树上的每一个点的相互连通性的 我的做法 就是基于这样展开的 我们有T1 T2两棵树 现在我们要去
  • HDOJ 1052 Tian Ji -- The Horse Racing

    Tian Ji The Horse Racing Time Limit 2000 1000 MS Java Others Memory Limit 65536 32768 K Java Others Total Submission s 2
  • AcWing 104. 货仓选址

    题目 在一条数轴上有 N 家商店 它们的坐标分别为 A1 AN 现在需要在数轴上建立一家货仓 每天清晨 从货仓到每家商店都要运送一车商品 为了提高效率 求把货仓建在何处 可以使得货仓到每家商店的距离之和最小 输入格式 第一行输入整数N 第二
  • 璀璨光滑【牛客】【题意解析+BFS+贪心】

    题目链接 中文题意 表面平静 实则暗藏玄机 而打开本题的突破口 也确确实实就在于题目的描述 也就是说 这张图的边的数目是确定的 并且这是一张连通图 而且图上的个点每个点连接出去的边的数目都是条 因为每个数都刚好只与个数在二进制位上差1 那么
  • 【BZOJ 2219】【超详细题解】数论之神

    2219 数论之神 Time Limit 3 Sec Memory Limit 259 MB Submit 365 Solved 33 Submit Status Discuss Description 在ACM DIY群中 有一位叫做 傻
  • 多元Huffman编码问题

    题目链接 题意 最多可以让k堆合并 每一次合并的花费为河合并堆的数量 问最多和最少的花费 题解 最少的花费一定是每次合并的堆数尽可能多 这样我们就会减少前面已经合并的堆的重复计算 所以 每次合并k堆时最少 每次合并2堆时最大 另外 最少的时
  • HDOJ1052

    先用最快马比 不行再用最慢马比 都不行 就送最慢马给忘得最快马 include
  • Stall Reservations POJ - 3190

    这道题 是学长给我们布置的学习用的题目 重在给我们讲解了什么是优先队列以及其对应的贪心问题 好了 先送上 中文翻译过的题意 手动 滑稽 Oh those picky N 1 lt N lt 50 000 cows They are so p
  • Educational Codeforces Round 67 (Rated for Div. 2)

    contest链接 A Stickers and Toys time limit per test 2 seconds memory limit per test 256 megabytes input standard input out
  • ArabellaCPC 2019 I:Bashar and Hamada 贪心

    Bashar and Hamada 给你一个长度为 n 的数组 选k个数 使F ai aj k个数 i j 求k 2 3 n时 F的最大值 首先n 2时 肯定选择数组中的最大值和最小值 这样F2 max min F2最大 n 3时 在F2的
  • LeetCode-1827. 最少操作使数组递增【贪心,数组】

    LeetCode 1827 最少操作使数组递增 贪心 数组 题目描述 解题思路一 简单暴力 解题思路二 优化1 ans是操作数 mx是当前最大元素 mx无论如何会依次递增 解题思路三 优化2 遇到小的数就pre 1 否则变为num 题目描述
  • HDU--1050:Moving Tables (贪心)

    1 题目源地址 http acm hdu edu cn showproblem php pid 1050 2 解题思路 将每个输入的起始房间和结束房间转换为房间前面的区间 按区间起始位置从小到大排序 首先取第一个区间 后续如果有区间的起始位
  • AcWing 1247. 后缀表达式

    老师的讲课网址 https www acwing com video 736 第二个图就已经告诉我们只要有一个减号 我们就可以组成至少含一个减号的所有组合 比如说一个减号三个加号我们可以组合成 1 2 3 4 所以代码如下 include
  • [NOI 2015复习][BZOJ 1509][NOI 2003]逃学的小孩(树的直径)

    题目链接 http www lydsy com JudgeOnline problem php id 1509 题目大意 要从一棵树中找出三个点 X Y Z X Y Z 使得 min dis A C dis B C dis A B min
  • 编程之美2015初赛第二场AB

    题目1 扑克牌 时间限制 2000ms 单点时限 1000ms 内存限制 256MB 描述 一副不含王的扑克牌由52张牌组成 由红桃 黑桃 梅花 方块4组牌组成 每组13张不同的面值 现在给定52张牌中的若干张 请计算将它们排成一列 相邻的
  • Match Points【Codeforces 1156C】【二分答案】

    题目链接 题意有点像上海EC某年的一道铜牌题 具体是哪年记不得了 我们要去N个的关系 使得最多的匹配对达到他们的差值 Z 这样的情况 有这样的一组数据可以很好的反映这道题为什么有人会WA了 4 3 1 4 5 7 但是 同时也证明了 我们取

随机推荐

  • [python]bokeh学习总结——QuickStart

    bokeh是python中一款基于网页的画图工具库 画出的图像以html格式保存 一个简单的例子 from bokeh plotting import figure output file show output file patch ht
  • 电子信息工程电子信息毕设分享100例(一)

    单片机毕业设计项目分享系列 这里是DD学长 单片机毕业设计及享100例系列的第一篇 目的是分享高质量的毕设作品给大家 包含全面内容 源码 原理图 PCB 实物演示 论文 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的单片机项目缺少
  • STM32之音频数据的Flash读取与DAC播放

    文章目录 一 STM32103之内部Flash原理 1 Flash介绍 2 Flash的组成 3 STM32内部框架图 二 SD卡的读写 1 实验过程 2 查看hello txt 3 从SD卡里读出数据 三 Flash地址空间的数据读取 1
  • 说说ERP软件的系统设计--开源软件诞生8

    赤龙ERP系统设计篇 第8篇 用日志记录 开源软件 的诞生 赤龙 ERP 开源地址 点亮星标 感谢支持 与开发者交流 kzca2000 码云 https gitee com redragon redragon erp GitHub http
  • 4、pytest -- fixtures:明确的、模块化的和可扩展的

    pytest fixtures的目的是提供一个固定的基线 使测试可以在此基础上可靠地 重复地执行 对比xUnit经典的setup teardown形式 它在以下方面有了明显的改进 fixture拥有一个明确的名称 通过声明使其能够在函数 类
  • IntelliJ IDEA启动项目端口号被占用怎么解决!

    前言 在使用IDEA开发的时候 经常能碰到端口号被占用的报错 我就经常遇到因为我不知道为啥我IDEA他会在我没用的情况下会闪掉 然后等我发现再打开 运行项目的时候就经常报这个错 不过还有的同学是因为启动多个项目 导致端口号用的一样的所有才出
  • 计算机视觉中的深度学习6: 反向传播

    Slides 百度云 提取码 gs3n 神经网络的梯度下降 我们之前在学习线性分类器的时候 使用Loss函数以及梯度下降法来更新权重 那么对于神经网络 我们该如何计算每层神经元的权重呢 对每层W直接求导 愚蠢的方法 如上公式所示 Loss函
  • IDEA-设置VM启动参数

    点击配置 OK 使用方式 System out println System getProperty parm
  • Mysql5.7安装3306端口报错问题解决方法

    自己尝试重装Mysql 但是过程中遇到端口报错 Mysql5 7下载及安装大家可以去参考其他博客 有很详细的过程 我在安装过程中遇到了3306报错 就是在端口号的旁边会有一个感叹号 由于我是重装 我大概猜到原因是之前的Mysql没有卸载干净
  • MySQL安装之yum安装

    在CentOS7中默认安装有MariaDB 这个是MySQL的分支 但为了需要 还是要在系统中安装MySQL 而且安装完成之后可以直接覆盖掉MariaDB 1 下载并安装MySQL官方的 Yum Repository 1 root Bria
  • Linux基础之SQLite数据库

    嵌入式数据库篇 一 SQLite数据库 二 SQLite数据库安装 三 SQLite的命令用法 四 打开 创建数据库的C接口 五 C代码执行sql语句 六 C代码建表和插入数据 七 总结 一 SQLite数据库 1 简介 轻量化 易用的嵌入
  • 使用SpringSecurity

    前几天写了一个SpringBoot对拦截器的使用 在实际项目中 对一些情况需要做一些安全验证 比如在没有登录的情况下访问特定的页面应该解释的拦截处理 这一篇介绍使用SpringSecurity来做简单的安全控制 由于SpringSecuri
  • Servlet实现简单的前后端交互

    Servlet实现简单的前后端交互 首先前后端交互是啥呢 在我的理解中大概是这样的 简单的讲就是数据的交换 接下来我们来看看应该要怎么实现这个简单的交互 1 首先我们前端先不写静态页面 直接在url上将请求的参数放上去 2 后端要做的首先就
  • Mybatis+Servlet+Mysql 整合的一个小项目:对初学者非常友好,有助于初学者很快的上手Java Web

    文章目录 前言 为何要写 目录结构 1 依赖配置 1 1 创建一个web项目 1 2 依赖需求分析 1 3 pom xml 2 配置Mybatis 2 1 mybatis config xml 2 2 UserMapper xml 2 3
  • layui改变字体颜色或者背景颜色

    改变文字颜色 done function res curr count if res data length gt 0 each res data function ii dd if NOTNULL dd islatetime if par
  • 数据库开发题目-什么是视图?以及视图的使用场景有哪些?

    1 视图是一种虚表 2 视图建立在已有表的基础上 视图赖以建立的这些表称为基表 3 向视图提供数据内容的语句为 SELECT 语句 可以将视图理解为 存储起来的 SELECT 语句 4 视图向用户提供基表数据的另一种表现形式 5 视图没有存
  • 数据结构-期末复习重要知识点总结

    目录 第一章 绪论 第二章 线性表 3 顺序表表示 4 顺序表基本运算 5 链表 6 链表的基本运算 7 循环链表 8 双链表 9 静态链表 10 一元多项式表示及相加 第三章 限定性线性表 栈与队列 1 顺序栈 2 链栈 3 链队列 4
  • 三、Pytorch中tensor的内部结构

    tensor的数据结构 tensor分为头信息区 Tensor 和存储区 Storage 信息区主要保存着tensor的形状 size 步长 stride 数据类型 type 等信息 而真正的数据则保存成连续数组 由于数据动辄成千上万 因此
  • Android机顶盒网络地址端口连通性测试

    Android机顶盒网络地址端口连通性测试 文章目录 Android机顶盒网络地址端口连通性测试 1 直接telnet 2 busybox telnet 3 测试工具 一般我们使用如下三种方式进行测试 前一种不满足则执行下一种 1 外网可以
  • [POI2007]砝码Odw

    看这数据范围就不太可DP的样子 考虑贪心 首先注意到题目里有对于任意两个砝码其中一个是另一个质量整数倍的条件 所以砝码质量的种类不超过log INF 考虑按质量从小到大把砝码往容器里放 这样的话所有的砝码和容器的质量都可以除以当前砝码质量然