hdu1059

题意,现在有价值为1、2、3、4、5、6的石头若干块,块数已知,问能否将这些石头分成两堆,且两堆价值相等。

很显然,愚蠢的我一开始并想不到什么多重背包二进制优化```因为我连听都没有听过```不得不吐槽自己的知识面太窄```于是,我用了母函数写这题,母函数的做法并没有问题,但是由于这道题的数据很大,母函数轻轻松松就超时了,于是,我又很努力地在母函数循环的优化上面想出路,改改改,各种改之后依旧TLE,01背包的做法显然也是会超时的,DISCUSS里的母函数做法优化方式都是模上一个大质数,但很明显,只是因为数据较弱才会过的,因为没有人能保证被这个数模掉的那些部分是否可以平分,模掉之后剩下的数也很有可能就因此不能平分了所以这种优化肯定是不可取的。

问过学长粗看了题解之后才知道原来还有一种叫多重背包的东西,学长推荐我看背包九讲,我看了之后才会做这个题目```

多重背包其实本身也是01背包,但由于有多个价值相同的物品,所以有更加优化的解法就是用二进制优化,将相同价值的物品分为 20, 21 , 22 ,```个,最后再有一部分不能继续向二进制高阶划分的,将这些被划分的物品分别合成一个物品,那么就得到了价值为 1 倍的、2倍的、4倍的```物品,然后再按照01背包的做法,通过二进制数的加和可以实现物品的所有放入情况。

 #include<stdio.h>
#include<string.h>
#define max(a,b) a>b?a:b
int Va[],We[],n[],dp[]; int main(){
int c=;
while(scanf("%d%d%d%d%d%d",&n[],&n[],&n[],&n[],&n[],&n[])!=EOF&&(n[]!=||n[]!=||n[]!=||n[]!=||n[]!=||n[]!=)){
// if(c)printf("\n");
printf("Collection #%d:\n",++c);
int i,j,sum=,mid;
for(i=;i<=;i++)sum+=i*n[i];
if(sum%){
printf("Can't be divided.\n\n");
continue;
}
else mid=sum/;
memset(dp,-,sizeof(dp));
int count=,temp;
for(i=;i<=;i++){
temp=;
while(n[i]>=temp){
Va[++count]=i*temp;
We[count]=temp;
n[i]-=temp;
temp*=;
}
if(n[i]>){
Va[++count]=i*n[i];
We[count]=n[i];
}
}
dp[]=;
for(i=;i<=count;i++){
for(j=mid;j>=Va[i];j--){
if(dp[j-Va[i]]>=){
dp[j]=max(dp[j],dp[j-Va[i]]+We[i]);
}
}
}
if(dp[mid]>)printf("Can be divided.\n\n");
else printf("Can't be divided.\n\n");
}
return ;
}

hdu1059 dp(多重背包二进制优化)的更多相关文章

  1. HDOJ(HDU).2844 Coins (DP 多重背包+二进制优化)

    HDOJ(HDU).2844 Coins (DP 多重背包+二进制优化) 题意分析 先把每种硬币按照二进制拆分好,然后做01背包即可.需要注意的是本题只需要求解可以凑出几种金钱的价格,而不需要输出种数 ...

  2. HDOJ(HDU).1059 Dividing(DP 多重背包+二进制优化)

    HDOJ(HDU).1059 Dividing(DP 多重背包+二进制优化) 题意分析 给出一系列的石头的数量,然后问石头能否被平分成为价值相等的2份.首先可以确定的是如果石头的价值总和为奇数的话,那 ...

  3. HDOJ(HDU).2191. 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活 (DP 多重背包+二进制优化)

    HDOJ(HDU).2191. 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活 (DP 多重背包+二进制优化) 题意分析 首先C表示测试数据的组数,然后给出经费的金额和大米的种类.接着是每袋大米的 ...

  4. BZOJ.3425.[POI2013]Polarization(DP 多重背包 二进制优化)

    BZOJ 洛谷 最小可到达点对数自然是把一条路径上的边不断反向,也就是黑白染色后都由黑点指向白点.这样答案就是\(n-1\). 最大可到达点对数,容易想到找一个点\(a\),然后将其子树分为两部分\( ...

  5. hdu-1059(多重背包+二进制优化)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1059 题意:输入6个数,每个数ni代表价值为i的物品有ni个.求如果这些物品能均分给两个人,每个人获得 ...

  6. hdu 2191 (多重背包+二进制优化)

    Problem Description 急!灾区的食物依然短缺!为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品, ...

  7. Coins(多重背包+二进制优化)

    Problem Description Whuacmers use coins.They have coins of value A1,A2,A3...An Silverland dollar. On ...

  8. Cash Machine POJ - 1276 多重背包二进制优化

    题意:多重背包模型  n种物品 每个m个  问背包容量下最多拿多少 这里要用二进制优化不然会超时 #include<iostream> #include<cstdio> #in ...

  9. HDU 5445 Food Problem(多重背包+二进制优化)

    http://acm.hdu.edu.cn/showproblem.php?pid=5445 题意:现在你要为运动会提供食物,总共需要提供P能量的食物,现在有n种食物,每种食物能提供 t 能量,体积为 ...

随机推荐

  1. 我为什么放弃使用mybatis3的mapper注解了

    原文链接 最近在使用MyBatis3做项目.在使用注解实现Mapper的时候遇到了比较奇葩的问题:在实现数据的batch insert的时候总是报错.好不容易可以正常插入了,但是又不能返回自增的主键i ...

  2. DATEADD 和 CAST 函数

    where cast(soh.orderdate as date)=cast(dateadd(day,-1,getdate()) as date) 这一代码在sql 2005 不适用,使用conver ...

  3. 浏览器对应用程序的根URL发出请求时所发生的情况(结合 DI)

    1. 浏览器向 MVC 框架发送一个请求 Home 的 URL,MVC 准备创建 HomeController 类的实例. 2. MVC 框架在创建 HomeController 类实例过程中会发现其 ...

  4. EBS 中iSupplier模块中的MAPPING_ID

    在EBS的供应商模块中,有一个非常有意思的表 POS_SUPPLIER_MAPPINGS, 这个表中建立了supplier_reg_id,vendor_id,party_id之间的映射关系. 这个表中 ...

  5. Java容器——Set接口

    1.定义 set中不允许放入重复的元素(元素相同时只取一个).它使用equals()方法进行比较,如果返回true,两个对象的HashCode值也应该相等. 2.方法 TreeSet中常用的方法: b ...

  6. ioS UI-导航控制器(NavigationController)

    #import "AppDelegate.h" #import "ViewController.h" @interface AppDelegate () @en ...

  7. Qt经典—线程、事件与Qobject

    介绍 You’re doing it wrong. — Bradley T. Hughes 线程是qt channel里最流行的讨论话题之一.许多人加入了讨论并询问如何解决他们在运行跨线程编程时所遇到 ...

  8. PHP:第三章——PHP中返回引用的函数

    <?php header("Content-Type:text/html;charset=utf-8"); $i=1; function &F(){ global $ ...

  9. 找到多个与名为“Home”的控制器匹配的类型,如果为此请求(“{controller}/{action}/{id}”)提供服务的路由没有指定命名空间来搜索匹配此请求的

    参考文章: http://blog.csdn.net/chengmodelong/article/details/41890229 https://www.cnblogs.com/zgqys1980/ ...

  10. 申请和使用github共享代码

    1.申请github帐号 https://github.com/join?source=header-home 2.创建项目 2.1 或者: 2.2 输入信息 2.3创建成功,地址及基本命令提示 3. ...