zoukankan      html  css  js  c++  java
  • 【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

    2 4
    13 9
    4 12 2 4

    Sample Output

    3

    题解:由于任意两个砝码的质量都存在倍数关系,那么本质不同的砝码最多只有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;
    }

     

  • 相关阅读:
    网页色彩搭配
    jquery富文本在线编辑器UEditor
    编写、部署、应用JavaBean
    图片存储构架学习
    JVM内存管理(一)
    同步or异步
    分库分表策略的可实现架构
    百万数据查询优化技巧三十则
    匿名内部类
    MySQL limit分页查询优化写法
  • 原文地址:https://www.cnblogs.com/CQzhangyu/p/7300753.html
Copyright © 2011-2022 走看看