问题大意:

有价值1-6的六种物品,分别规定其数目,问是否存在一种方法能使这些物品不拆分就能平均分给两个人

 #include <cstdio>
#include <cstring>
#include <iostream>
using namespace std; int v[] , ans , k;
int dp[];
//0-1背包
void zeroPack(int w , int v)
{
for(int i = ans ; i>=w ; i--)
dp[i] = max(dp[i] , dp[i - w]+v);
}
//完全背包
void compPack(int w , int v)
{
for(int i = w ; i<=ans ; i++)
dp[i] = max(dp[i] , dp[i - w]+v);
}
//多重背包
void multiPack(int n , int w , int v)
{
if(n*v > ans) compPack(w , v);
else{
int t = ;
while(n >= t){
zeroPack(t*w , t*v);
n-=t;
t <<= ;
}
if(n > ) zeroPack(n*w , n*v);
}
} int main()
{
int cas = ;
while(){
ans = ;
k = ;
for(int i = ; i< ; i++){
scanf("%d" , v+i);
ans += v[i]*(i+);
}
if(ans == ) break; if(ans & ){
printf("Collection #%d:\n" , ++cas);
puts("Can't be divided.");
puts("");
continue;
}
ans >>= ;
memset(dp , , sizeof(dp));
for(int i = ; i< ; i++){
multiPack(v[i] , i+ , i+);
} if(dp[ans] == ans){
printf("Collection #%d:\nCan be divided.\n\n" , ++cas);
}
else printf("Collection #%d:\nCan't be divided.\n\n" , ++cas);
}
return ;
}

HDU 1059 多重背包问题的更多相关文章

  1. hdu 1059 (多重背包) Dividing

    这里;http://acm.hdu.edu.cn/showproblem.php?pid=1059 题意是有价值分别为1,2,3,4,5,6的商品各若干个,给出每种商品的数量,问是否能够分成价值相等的 ...

  2. hdu 1059 多重背包

    题意:价值分别为1,2,3,4,5,6的物品个数分别为a[1],a[2],a[3],a[4],a[5],a[6],问能不能分成两堆价值相等的. 解法:转化成多重背包 #include<stdio ...

  3. hdu 1059 多重背包 背包指数分块

    思路: 这个方法要看<浅谈几类背包问题>这篇论文. #include"stdio.h" #define Max(a,b) (a)>(b)?(a):(b) ],k[ ...

  4. Dividing (hdu 1059 多重背包)

    Dividing Sample Input 1 0 1 2 0 0 价值为1,2,3,4,5,6的物品数目分别为 1 0 1 2 0 0,求能否将这些物品按价值分为两堆,转化为多重背包.1 0 0 0 ...

  5. HDU 2191多重背包问题、

    #include<cstdio> #include<cmath> #include<iostream> #include<cstring> +; int ...

  6. HDU 1114 完全背包 HDU 2191 多重背包

    HDU 1114 Piggy-Bank 完全背包问题. 想想我们01背包是逆序遍历是为了保证什么? 保证每件物品只有两种状态,取或者不取.那么正序遍历呢? 这不就正好满足完全背包的条件了吗 means ...

  7. 多重背包问题:悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(HDU 2191)(二进制优化)

    悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 HDU 2191 一道裸的多重背包问题: #include<iostream> #include<algorithm> #i ...

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

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

  9. hdu 1059 Dividing bitset 多重背包

    bitset做法 #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset((a),b,sizeof(a ...

随机推荐

  1. Java 添加、回复、修改(替换)、删除Word批注

    批注是一种常用于对特定文档内容进行注解的工具或方法,起到解释说明.标记指正的作用.在本篇文章中,将介绍如何操作Word批注的方法,包括: 1. 添加批注:添加文本到批注.插入图片到批注: 2. 回复批 ...

  2. c++ strcmp函数

    用法:加头文件 #include <string.h> 功能:比较字符串s1和s2. 一般形式:strcmp(字符串1,字符串2) 返回值: 当s1<s2时,返回值<0 当s1 ...

  3. JSON使用讲解

    前端操作json  一.JSON字符串与JSON对象的区别 1. 一个对象以“{”  开始,     “}”结束.   每个“名称”后跟一个“:”(冒号):“‘名称/值’ 对”之间运用 “,”(逗号) ...

  4. IIS 相关配置

    IIS 和 VS 安装顺序 正常情况是先装IIS,后装VS:这样就不会发生错误了,因为asp.net就可以注册写入到IIS中.如果先装VS,再装IIS,这样就会导致"访问IIS元数据库失败& ...

  5. 无法连接到已配置的web服务器

    问题:如题,asp.net WebForm的项目,在vs中选择aspx文件在浏览器中查看时候回报该错误. 网上最多的解决方案是防火墙的原因,说关闭防火墙就可以了.但问题是我另一个项目没有问题啊,所以不 ...

  6. 01按照官方步骤编译NanoPiM1Plus的Android

    01按照官方步骤编译NanoPiM1Plus的Android 大文实验室/大文哥 壹捌陆捌零陆捌捌陆捌贰 21504965 AT qq.com 完成时间:2017/12/6 10:58 版本:V1.0 ...

  7. AVR单片机8位数码管显示的程序实现

    AVR单片机8位数码管显示的程序实现 转载:http://www.sohu.com/a/117255149_119709   2016-10-26 16:30 我们接着来完成 数码管的显示实验.现在我 ...

  8. CentOS7上安装稻壳CMS

    CentOS7上安装稻壳CMS 1, 安装用途 为了给某公司建设一个小型网站,租用了一个阿里云ECS服务器,最基础的硬件配置,因此选择了CentOS7操作系统. 稻壳CMS(docCMS)源于深喉咙C ...

  9. hashtable的用法

    C#中哈希表(HashTable)的用法详解 1.  哈希表(HashTable)简述 在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器 ...

  10. Dreamweaver启动出错--Designer.xml错误

    Designer.xml错误导致Dreamweaver CS4无法启动 xml parsing fatal error:Invalid document structure,line:1, file: ...