【BZOJ1110】[POI2007]砝码Odw 贪心
【BZOJ1110】[POI2007]砝码Odw
Description
在byteotian公司搬家的时候,他们发现他们的大量的精密砝码的搬运是一件恼人的工作。公司有一些固定容量的容器可以装这些砝码。他们想装尽量多的砝码以便搬运,并且丢弃剩下的砝码。每个容器可以装的砝码数量有限制,但是他们能够装的总重量不能超过每个容器的限制。一个容器也可以不装任何东西。任何两个砝码都有一个特征,他们的中总有一个的重量是另外一个的整数倍,当然他们也可能相等。
Input
第一行包含两个数n和m。表示容器的数量以及砝码的数量。(1<=n, m<=100000) 第二行包含n个整数wi,表示每个容器能够装的最大质量。(1<=wi<=1000000000) 第三行包含m个整数mj,表示每个砝码的质量。(1<=mj<=1000000000)
Output
仅包含一个数,为能够装进容器的最多的砝码数量。
Sample Input
13 9
4 12 2 4
Sample Output
题解:由于任意两个砝码的质量都存在倍数关系,那么本质不同的砝码最多只有log个。并且我们一定是从小到大贪心的去选。下面是具体做法:
将每种砝码当成一位,然后将所有背包容量按照混合进制的方法拆位,将所有背包的每一位进行不进位的加法,这样就相当于将原来的背包合成了一个新背包。在放入物品时,我们先看当前位是否能-1,如果不能,就到更高的位上去借位即可。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int n,m,len,ans;
int bas[50],w[100010],v[100010],c[50];
int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-')f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
return ret*f;
}
int main()
{
n=rd(),m=rd();
int i,j;
for(i=1;i<=n;i++) w[i]=rd();
for(i=1;i<=m;i++) v[i]=rd();
sort(v+1,v+m+1);
for(i=1;i<=m;i++)
{
if(v[i]>bas[len]) bas[++len]=v[i];
v[i]=len;
}
for(i=1;i<=n;i++) for(j=len;j;j--) c[j]+=w[i]/bas[j],w[i]%=bas[j];
for(i=1;i<=m;i++)
{
if(c[v[i]]) c[v[i]]--,ans++;
else
{
for(j=v[i];j<=len;j++)
{
if(c[j])
{
c[j]--;
break;
}
c[j]=bas[j+1]/bas[j]-1;
}
if(j>len) break;
else ans++;
}
}
printf("%d",ans);
return 0;
}
【BZOJ1110】[POI2007]砝码Odw 贪心的更多相关文章
- [bzoj1110][POI2007]砝码Odw_贪心
bzoj-1110 POI-2007 砝码Odw 参考博客:http://hzwer.com/4761.html 题目大意:在byteotian公司搬家的时候,他们发现他们的大量的精密砝码的搬运是一件 ...
- bzoj 1110 [POI2007]砝码Odw 贪心+进制转化
[POI2007]砝码Odw Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 661 Solved: 366[Submit][Status][Disc ...
- BZOJ 1110: [POI2007]砝码Odw( 贪心 )
ORZjcvb... #include<bits/stdc++.h> using namespace std; ; int N, M, item[maxn], V[maxn]; vecto ...
- BZOJ1110: [POI2007]砝码Odw
Description 在byteotian公司搬家的时候,他们发现他们的大量的精密砝码的搬运是一件恼人的工作.公司有一些固定容量的容器可以装这些砝码.他们想装尽量多的砝码以便搬运,并且丢弃剩下的砝码 ...
- BZOJ 1110: [POI2007]砝码Odw
1110: [POI2007]砝码Odw Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 547 Solved: 296[Submit][Status ...
- 【BZOJ】1110: [POI2007]砝码Odw
题意 给定\(n\)个砝码和\(m(1 \le n, m \le 100000)\)个背包\((1 \le n_i, m_i \le 1000000000)\),保证对于任意两个砝码都有一个是另一个的 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 51nod 1449 砝码称重(贪心算法)
题目:传送门. 题意:中文题. 题解:左物右码,w进制.m%w==0||m%w==1||m%w==w-1都是可以的,否则是NO. #include <iostream> #include ...
- [POI2007]ODW-Weights(贪心)
在byteotian公司搬家的时候,他们发现他们的大量的精密砝码的搬运是一件恼人的工作.公司有一些固定容量的容器可以装这些砝码.他们想装尽量多的砝码以便搬运,并且丢弃剩下的砝码.每个容器可以装的砝码数 ...
随机推荐
- 排列计数(bzoj 4517)
Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列恰好有 m 个数是 ...
- comet realization with ajax&php
1.prepare front-end code, meta content-type cannot be ignored! as to the xhr, status should be 3 < ...
- python作为计算器(数学用法)
1.基本的加减乘除与取余运算 >>> print(5+10) 15 >>> print(5-10) -5 >>> print(5*10) 50 & ...
- 【Visual Studio】Visual Studio 2015快捷键设置问题 alt+ F8 (转)
具体修改方法如下: 工具-选项-环境-键盘-应用以下其他键盘映射方案,选择visual C++6, 然后编代码试试,嘿,我的alt+F8回来了(否则是ctrl + k, ctrl + f); 原文转自 ...
- 转 Python爬虫实战二之爬取百度贴吧帖子
静觅 » Python爬虫实战二之爬取百度贴吧帖子 大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 ...
- sql server trace
http://www.cnblogs.com/zhijianliutang/p/4113911.html http://www.cnblogs.com/studyzy/archive/2009/01/ ...
- 好用的Python IDLE Sublime Text 3推荐
Sublime Text 3 下载地址为 LINK, Sublime Text 3 is currently in beta. The latest build is 3114. 参考的激活方式为输入 ...
- iOS实现提现类似的密码输入框
最近一段时间,在网上不断看了一些技术人员写的代码demo,由于前段时间一直在写一个电商项目,记得有一个功能和看到的demo中类似,但是截然2种不同的处理方法,个人觉得我的这个方法更为简洁一些,所以我把 ...
- C 标准库 - <time.h>
C 标准库 - <time.h> 简介 time.h 头文件定义了四个变量类型.两个宏和各种操作日期和时间的函数. 库变量 下面是头文件 time.h 中定义的变量类型: 序号 变量 &a ...
- 算法 binary search
// ------------------------------------------------------------------------------------------------- ...