在byteotian公司搬家的时候,他们发现他们的大量的精密砝码的搬运是一件恼人的工作。公司有一些固定容量的容器可以装这些砝码。他们想装尽量多的砝码以便搬运,并且丢弃剩下的砝码。每个容器可以装的砝码数量有限制,但是他们能够装的总重量不能超过每个容器的限制。一个容器也可以不装任何东西。任何两个砝码都有一个特征,他们的中总有一个的重量是另外一个的整数倍,当然他们也可能相等。

Solution

关键的地方就是任意两个物品之间都是整数倍之间的关系。

我们可以吧每个容器k进制拆分,那么我们把物品从小到大依次加入,如果当前位不满足,就从高位借。

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define N 100002
using namespace std;
int a[N],b[N],c[N],tot,d[N],ji[N],n,m;
int dfs(int id){if(id>tot)return 0; if(d[id])return d[id]--,1;if(dfs(id+1)){d[id]+=c[id+1]/c[id],d[id]--;return 1;}return 0;
}
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;++i)scanf("%d",&a[i]);for(int i=1;i<=m;++i)scanf("%d",&b[i]); sort(b+1,b+m+1); for(int i=1;i<=m;++i){if(b[i]!=b[i-1])c[++tot]=b[i];ji[i]=tot;}for(int i=1;i<=n;++i)for(int j=tot;j>=1;--j){d[j]+=a[i]/c[j];a[i]%=c[j];}int now=1;for(int i=1;i<=m;++i){if(!dfs(ji[i])){printf("%d",i-1);return 0;}if(i==m)cout<<m;}return 0;
} 

转载于:https://www.cnblogs.com/ZH-comld/p/9866584.html

[POI2007]ODW-Weights(贪心)相关推荐

  1. 算法——贪心算法解0-1背包问题

    问题的描述 我们先根据一个贪心算法的经典应用实例,然后给出贪心算法的实现步骤与关键环节,最后给出C++代码求解0-1背包问题. 背包问题(Knapsack Problem):有NN件物品有一个承重(也 ...

  2. bzoj 1106: [POI2007]立方体大作战tet(贪心+树状数组)

    1106: [POI2007]立方体大作战tet Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 785  Solved: 574 [Submit][ ...

  3. bzoj1110: [POI2007]砝码Odw

    神题 考虑到有倍数关系这个条件,所以可以运用进制的思想,比如当有3,9,18,54这些种类的砝码时,133的容量可以写成2*54+1*18+0*9+2*3+1,末尾的+1永远用不上,可以舍弃,那么各位 ...

  4. Weights and Measures(贪心+动态规划)

    I know, up on top you are seeing great sights, But down at the bottom, we, too, should have rights. ...

  5. 【UVA - 10154 】Weights and Measures (贪心排序,dp,类似0-1背包,状态设定思维)

    题干: The Problem Mack, in an effort to avoid being cracked, has enlisted your advice as to the order ...

  6. BZOJ1110 : [POI2007]砝码Odw

    砝码从小到大放最优,二分答案mid,转化为判定前mid小的砝码能否放完. 从大到小考虑砝码,依次扫描每个容器,能放就放. 由于砝码重量都成倍数关系,所以最多只有$O(\log n)$种不同的数字,所以 ...

  7. 野生前端的数据结构练习(12)贪心算法

    参考代码可见:https://github.com/dashnowords/blogs/tree/master/Structure/GreedyAlogrithm 一.贪心算法 贪心算法属于比较简单的 ...

  8. nyoj--364--田忌赛马(贪心)

    田忌赛马 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 Here is a famous story in Chinese history. "That wa ...

  9. 背包问题 贪心算法 java_JS基于贪心算法解决背包问题

    前面我们分享了关于js使用贪心算法解决找零问题,本文我们接着为大家介绍JS基于贪心算法解决背包问题. 贪心算法:在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做 ...

  10. js贪心算法---背包问题

    /** @param {Object} capacity 背包容量 6* @param {Object} weights 物品重量 [2,3,4]* @param {Object} values 物品 ...

最新文章

  1. PetShop之表示层设计 - 《解剖PetShop》系列之六
  2. Solr 4.x定时、实时增量索引 - 修改、删除和新增索引
  3. seaborn系列 (18) | 线性回归图regplot()
  4. windows下实现Git在局域网使用
  5. 二分图的最大带权匹配
  6. NDK开发之日志打印
  7. 成绩不超过100的C语言,输入若干个学生的百分制成绩,计算平均分并输出.输入-1表示结束,若输入的成绩超过100,则需重新输入.c语言...
  8. 【Python】Matplotlib 可视化必备神书,附pdf下载
  9. HDU4349--Xiao Ming's Hope(数论)
  10. 读《程序员的SQL金典》[2]--函数
  11. 这可能是现实版程序员!
  12. mysql数据库 二十一练习题 及答案 (mysql练习题)
  13. postman - github下载地址
  14. 万字雄文前瞻丨区块链及隐私计算在传统企业中的技术认知与进阶思考
  15. 如何用计算机计算一元三次方程,计算器如何解一元三次方程?
  16. android+汉王手写引擎,汉王 从手写专家到输入法专家
  17. Netty websocket 推送数据压缩以 js解压
  18. 用pywinhook或pyhook监听鼠标事件
  19. linux ntp时间立即同步命令_linux时间同步,ntpd、ntpdate 【转】
  20. jquery事件代理

热门文章

  1. python向mysql插入数据
  2. ibatis java 项目_iBatis搭建JAVA项目
  3. 计算机版权转让公司,著作权转让
  4. cxf超时设置不起效_jmeter集合点设置(十三)
  5. python同时赋值_Python 中变量赋值传递时的引用和拷贝
  6. IT兄弟连 JavaWeb教程 Servlet中定义的变量的作用域类型
  7. PostgreSQL 10.1 手册_部分 III. 服务器管理_第 28 章 监控数据库活动_28.3. 查看锁
  8. Python3快速入门——(2)list和tuple(列表和元组)
  9. Apache服务器和tomcat服务器有什么区别(转)
  10. cisco产品命名规则