1110: [POI2007]砝码Odw

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 547  Solved: 296
[Submit][Status][Discuss]

Description

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

Input

  第一行包含两个数n和m。表示容器的数量以及砝码的数量。(1<=n, m<=100000) 第二行包含n个整数wi,表示
每个容器能够装的最大质量。(1<=wi<=1000000000) 第三行包含m个整数mj,表示每个砝码的质量。(1<=mj<=10000
00000)

Output

  仅包含一个数,为能够装进容器的最多的砝码数量。

Sample Input

2 4
13 9
4 12 2 4

Sample Output

3

HINT

 

Source

 

[Submit][Status][Discuss]

分析

显然,因为整数倍的关系,n个砝码的重量一共只有至多logW个,大约也就是30个。我们把这些数处理出来,当作进制。这样,可以将容量表示成一个至多30位的“数”,然后贪心先满足小的砝码,如果其所在的位上是0,就尝试从高位借位,注意处理递归借位的情况即可。

代码

 #include <cmath>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm> #define ri register int #define lim 100000000 char *p = new char[lim]; template <class T>
void read(T &x)
{
x = ; while (*p < '')++p; while (*p >= '')
x = x* + *p++ - '';
} #define N 100005 int n, m;
int w[N];
int c[N]; int bit[], cnt[], tot; int cmp(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
} void get(int t)
{
if (t > tot)return; if (!cnt[t + ])get (t + ); if (cnt[t + ])--cnt[t + ], cnt[t] += bit[t + ] / bit[t];
} signed main(void)
{ fread(p, , lim, stdin); read(m); read(n); for (ri i = ; i <= m; ++i)
read(c[i]); for (ri i = ; i <= n; ++i)
read(w[i]); qsort(w + , n, sizeof(int), cmp); for (ri i = , j = ; i <= n; i = j)
{
bit[++tot] = w[i]; while (w[i] == w[j])++j;
} bit[] = ; for (ri i = ; i <= m; ++i)
for (ri j = tot; c[i]; --j)
cnt[j] += c[i] / bit[j], c[i] %= bit[j]; ri answer = ; for (ri i = , j = ; i <= n; ++i)
{
if (bit[j] < w[i])++j; if (!cnt[j])get(j); if (cnt[j])++answer, --cnt[j];
} printf("%d\n", answer);
}

BZOJ_1110.cpp

@Author: YouSiki

最新文章

  1. iOS 应用数据存储方式(XML属性列表-plist)
  2. /proc/sys/vm/ 内存参数
  3. OEM - emctl resetTZ agent 设置时区
  4. HDU 3001 状压DP
  5. 链表插入排序(insertion-sort-list)
  6. hive 0.10 0.11新增特性综述
  7. 七个你无法忽视的Git使用技巧(转)
  8. tensorflow softplus应用
  9. chromium源码阅读--进程间通信(IPC)
  10. linux下简洁优化部署tomcat应用
  11. Ubuntu中拷贝文件的操作
  12. 学习Java的第一天
  13. shell中mail发邮件的问题
  14. 【转】Python中的运算符
  15. DDD随笔-Axon
  16. jQuery上传文件
  17. 知道创宇研发技能表v2.1
  18. 解题:USACO13JAN Island Travels
  19. 利用QtGraphicalEffects来使得自己的图像显示更加生动
  20. Maven 一段时间知识小结2

热门文章

  1. dubbo2.5.3 与spring 3.1.x 冲突
  2. Query on a tree——树链剖分整理
  3. CentOS搭建socket5代理服务器
  4. Linux共享库 socket辅助方法
  5. VMware Fusion 中如何复制centos/linux虚拟机
  6. springmvc 通过异常增强返回给客户端统一格式
  7. Vue系列:如何将百度地图包装成Vue的组件
  8. lecture14-RBM的堆叠、修改以及DBN的决策学习和微调
  9. HTML5+JS 《五子飞》游戏实现(三)页面和棋盘棋子
  10. 使用axes函数在matlab绘图中实现图中图的绘制