Poj 1014 Dividing(多重背包)

背包容量为T,有N件物品,重量分别为V1,V2V3......Vn,找出m件物品,使m件物品的重量正好等于T。 背包问题:背包容量为T,有N件物品,重量分别为V1,V2V3......Vn,找出m件物品,使m件物品的重量正好等于T。实验报告+详细代码 立即下载

一、题目大意

       有价值为1,2,3,4,5,6的六种大理石,它的数量不一。要在不破坏大理石的情况下,使两人能分到总价值相等的大理石。数量由标准输入给出,问给定数据能否平分。

二、题解

       首先,我们要的是平分总价值为两份,这里有一个很明显的剪枝,即如果总价值为奇数则直接输出不可分。如果总价值为偶数,则要把它分为两份,也就是意味着我们要能从给定数量的大理石中选取若干使它的价值为总价值的一半,这样剩下的就是另一半了。这不就是多重背包嘛!

       对于多重背包,就是有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。本题求的是价值总和能否等于总价值的一半,如果等于则说明可以分。所以,我们的最大容量就是总价值的一半。还有本题的大理石只有数量和重量两种属性,其实先前提到的大理石的价值就可以看成是重量。这题的做法和之前做的题目是一样的做法,Poj 1742 Coins(多重背包)。

       我还是要吐槽一下的,这个题目WA了四次,害的我总在找背包的原因,最后发现误会它了。是哪个该死的break的原因,在判断总价值奇数后就break了,应该是continue才对。这种小失误真是要命啊,要不是怎么说难题最多WA3次,水题就说不准了。

三、java代码

import java.util.Scanner;
public class Main{
  public static void main(String args[]){
   int i, j, sum1, sum2;
   int n=0;
   int[] c=new int[7];  //记录大理石个数
   Scanner sc=new Scanner(System.in);
   while(sc.hasNext()){
	  sum1=0;
	  sum2=0;
	  for(i=1;i<=6;i++){
		c[i]=sc.nextInt();
		sum2+=c[i]* i;
		sum1+=c[i];
	  }
	  if(sum1==0)
		  break;
	  n++;
	  if(sum2 % 2!=0){            //如果总价值为奇数则不可分
		  System.out.println("Collection #"+n+":");
	      System.out.println("Can't be divided.");
	      System.out.println();
	      continue;              //注意用continue
	  }
	  
      boolean dp[]=new boolean[sum2/2+1];
      dp[0]=true;
      for (i=1; i<=6; i++){
          if(c[i]!=0){
        	  int num[]=new int[sum2/2+1];
	          for (j=i; j<=sum2 /2; j++){
	             if (!dp[j] && dp[j-i] && num[j-i]< c[i]){
	                   dp[j]=true;             
	                   num[j]=num[j-i]+1;
	              }
	          }
          }
      }
      System.out.println("Collection #"+n+":");
      if(dp[sum2/2]){
    	  System.out.println("Can be divided.");
      }else
    	  System.out.println("Can't be divided.");
      System.out.println();  
   }
  } 
}





POJ1014-Dividing【DFS】【多重背包+二进制优化】 北大POJ1014-Dividing【DFS】【多重背包+二进制优化】 解题报告+AC代码 立即下载

相关推荐

树莓派与stm32通信超详细解答过程

笔者之前发过关于stm32与openmv通信的教程,在学习了几天opencv后,想实现树莓派4B与stm32进行通信。于是上网查询资料,最后实现了两者之间的通信,相信这对大多数电赛人都很有帮助,opencv的识别效果是远高于openmv以及K210的。在此我参考了以下资料辅助我学习,大家可以参考。基于树莓派4B与STM32的UART串口通信实验(代码开源)_树莓派4b串口波特率-优快云博客。

Halcyon0804的博客 5465

蓝桥杯-背包问题

#include<cstdio> #include<iostream> using namespace std; const int maxn = 30; int n,V,maxValue=0; int w[maxn], c[maxn]; void DFS(int index, int sumw,int sumc){ /* //死胡同 if(index==n){ i...

qq_41722101的博客 1866

WPS用户看过来:避开格式错乱坑,用WPS Office完美制作红头文件(2024最新版)

本文详细解析了WPS Office与Word在红头文件制作中的核心差异,提供了2024年最新版的零误差实战指南。从字体处理、页面布局到红头制作关键步骤,帮助用户避开格式错乱坑,确保跨设备显示一致。特别针对WPS用户优化,解决字体丢失、版式错位等常见问题。

weixin_26800111的博客 218

PKU ACM 1014 Dividing 平分 (DFS)

题目链接:Dividing   问题描述: 两个人平分物品,每件物品的价值不同(1 ~ 6),但多件物体可以有相同的价值。问是否可以平分。   主要思路: 1. 递归求解; 2. 两个重要的剪枝:     (1) 若总价值为奇数,则必不可分;     (2) 在

咔嚓!~咔嚓!~ 1341

TMP112/TMP102温度传感器驱动开发与嵌入式实战

数字温度传感器是嵌入式系统环境感知的核心器件,其通过I²C等标准总线实现高精度、低功耗测温。原理上依赖ΔΣ模数转换与二进制补码数据格式,结合寄存器配置实现模式控制、阈值报警与功耗管理。技术价值体现在±0.5°C级精度、1μA级静态电流及SOT-563超小封装带来的系统集成优势。广泛应用于工业MCU热监控、电池物联网终端、医疗电子温度补偿及汽车ECU板级测温等场景。本文围绕TMP112/TMP102展开,深入解析寄存器协议、硬件接口约束、HAL驱动分层设计、FreeRTOS任务调度及生产级校准方法,覆盖从芯片

weixin_35756690的博客 674

云端全自动AI漫剧生成工作流:从模型选型到完整实现

本文提出了一套云端全自动AI漫剧生成工作流解决方案,旨在解决传统漫剧制作效率低下的问题。该系统采用"编排引擎+模型矩阵"架构,通过集成大语言模型、图像生成、视频合成等技术,实现从剧本输入到成片输出的全流程自动化。 核心内容包括: 模型选型方案:剧本解析采用DeepSeek-V3/GPT-4o,图像生成使用DALL-E 3,视频合成选用Stable Video Diffusion,语音合成采用MiniMax TTS 系统架构设计:基于Celery分布式任务队列的编排层,分解任务至各功能模块

huanghm88的专栏 645

poj1014 Dividing题解

<br />原题:http://acm.pku.edu.cn/JudgeOnline/problem?id=1014<br />网上很多人说直接采用dp就可以了,但是我觉得不用那么复杂,用贪心算法+回溯+剪枝就可以了,而且特快,运行时间为0.<br />1.首先,将所有石子价值先加,如果sum为奇数,则返回false.<br />2.然后,采用贪心策略在石子中选择价值和为sum/2的组合,如果组合成功,返回true,否则false.<br />   a).既然贪心,那当然首先选价值为6的石子,在不大于sum

he-honghua的专栏 2166

8、音频运行时系统的架构设计

本文深入探讨了音频运行时系统的分层设计及其优势,包括逻辑层和物理层的功能划分。通过分层设计,开发者可以更轻松地管理和优化音频资源,确保其在不同平台上的高效运行。文章还介绍了平台适配与优化、错误处理与调试以及未来发展方向等内容,为开发者提供了宝贵的参考和指导。

juice的博客 463

poj 1014 Dividing(组合数学方法优化/多重背包问题+二进制优化)

poj 1014 Dividing(组合数学方法优化/多重背包问题+二进制优化)

PKU_ZZY的博客 1018

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之BswM模块配置详解(上)

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之BswM模块配置详解(上)

weixin_42412049的博客 740

当SLAM遇上FPGA:打造一个会“硬件加速”的激光雷达SLAM系统

点云数据的运动畸变校正特征点提取与匹配、以及ICP迭代最近点配准。在传统方案中,我们通常用ARM核完成所有计算。但点云配准中的最近邻搜索(KD-Tree)需要大量分支判断,CPU处理起来效率很低;而ICP中的矩阵分解(SVD)虽然计算量大,但非常适合并行化。ZYNQ的特殊之处在于它把ARM(PS端)和FPGA(PL端)集成在同一颗芯片上。ARM擅长跑操作系统、处理复杂逻辑和调度,FPGA擅长做高吞吐量的并行计算。两者之间通过AXI总线高速互联,数据交换延迟只有几十个时钟周期。

QQ_778132974的博客 375

【POJ】 1014 Dividing(多重背包,优化)

【POJ】 1014 Dividing(多重背包,优化) 【题目链接】http://poj.org/problem?id=1014 题目 Description Marsha and Bill own a collection of marbles. They want to split the collection among themselves so that bot

xuziling_的博客 398

基于环形槽谐振器与PIN二极管的频率可重构Vivaldi天线设计与CST仿真研究

摘要 本文设计了一种基于FR4基板的频率可重构Vivaldi天线,通过集成环形槽谐振器(CSRR)和PIN二极管开关实现超宽带(UWB,2-8 GHz)与窄带(2.4/3.5/5.2 GHz)模式的电控切换。天线采用指数渐变槽线结构,结合CSRR的滤波特性和PIN二极管的开关功能,利用CST仿真优化参数。结果表明,UWB模式下S11<-10 dB,窄带模式下目标频点谐振显著,其他频段抑制良好,验证了设计的可行性。该方案为多频段无线通信系统提供了紧凑、低成本的可重构天线解决方案。 关键词:频率可重构天线

huanghm88的专栏 218

POJ 1014 dividing(多重背包+二进制拆分)

#include using namespace std; int main () {  int a[6],count=1;  int vol[20010],f[20010*6];  while ( scanf("%d %d %d %d %d %d",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5]))  {   if( a[0]==0 && a[1]==0

AI蜗牛之家 1572

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【多重背包】poj 1014 Dividing

/* poj 1014 Dividing 题意: 分别给出值为1,2,3,4,5,6的数量,把这些分成两份,求能不能分成两份总值相等。 题解: 以前做过把一个数组分成两份,使得两份和差最小。我们用01背包求最大能组成的小于等于sum/2值。 那么这题无非是多重背包,本质是一样的。 */ #include #include #include #include #include #inclu

学无纸巾 401

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

POJ 1014 Dividing(多重背包 + 二进制优化 + 01背包)

题目链接:POJ 1014 Dividing 多重背包 + 二进制优化 + 01背包 我是在一个在小蛛蛛的博客学习的二进制优化。 解题思路:题目给价值为1~6的六种大理石的个数若干,要求我们判断是否能够把石头平分成相等的价值。我的思路是这样的:将大理石的重量看成和价值相等,那么总容量等于总价值数sum,那么如果总容量为sum/2时能装的最大价值也为sum/2,那么说明能拆分也两份相等的价

fobdddf的专栏 1384

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Dividing POJ - 1014 多重背包

一、内容 题意:问给定值1-6的大理石若干个,问可以划分为一半吗。 二、思路 二进制优化多重背包,凑出所有大理石和一半的值,若能凑出代表能划分。 三、代码 #include <cstdio> #include <cstring> #define max(a, b) (a > b ? a : b) using namespace std; const int N...

Tizzi的博客 610

poj 1014 Dividing 【多重背包】

Dividing Description Marsha and Bill own a collection of marbles. They want to split the collection among themselves so that both receive an equal share of the marbles. This would be easy if a

loving coding 455

POJ 1014 Dividing 多重背包

题意:有6种不同价值的石头,告诉你每种石头的数量。现在两个人要平分这些石头,希望每个人得到的价值相同的。问是否可以达到要求的方案。 思路:标准的多重背包,因为找到是否存在解,把数量二进制分解就行了。 代码如下: #include #include #include using namespace std; const int MAX = 200010; int a[MAX],dp

leodestiny 580

POJ 1014 Dividing ( 多重背包)

题意:玛莎和比尔有一批大理石(或弹珠)。他们想要将这批大理石分成价值和相等的两批。如果所有的大理石有同样的价值,那很简单,因为只要按数目分一半就行了。但是很可惜,一些大理石大一点,或者更漂亮一点。所以玛莎和比尔对每一个大理石分配一定的价值分从1到6。现在他们要分离这些大理石使得分别能获得相同总值。很可惜,他们意识到有时不可能平分大理石(即使总值是偶数)。例如,如果有1个价值为1,1个价值为3,两个

我要一步一步往上爬 699

[POJ - 1014] Dividing (多重背包)

链接 http://poj.org/problem?id=1014 题意 给你价值分别为1、2、3、4、5、61、2、3、4、5、61、2、3、4、5、6的大理石n1、n2、n3、n4、n5、n6n_1、n_2、n_3、n_4、n_5、n_6n1​、n2​、n3​、n4​、n5​、n6​份,数量和不超过200002000020000,现在问是否能把大理石分成价值相同的两份; 分析   这一题和p...

梧桐 249

HDU1059 POJ1014 Dividing 多重背包

HDU1059 POJ1014 Dividing 多重背包

htrdchh的博客 270

POJ 1014 Dividing【多重背包之可行解型】⭐⭐⭐⭐⭐

文章目录题目描述实现码前思考代码实现码后反思 题目描述 实现 码前思考 非典型性多重背包 代码实现 //比较隐蔽的多重背包问题,求得不是最值,而是可行性 #include <cstdio> #include <algorithm> using namespace std; const int maxc = 120010; const int maxn = 120010; int v[maxn]; bool dp[maxc]; int input[10]; int ma.

yc_cy1999的博客 263

POJ - 1014 Dividing (多重背包)

题意: 题意相当于:给你六种物品,每种物品对应有 \(num[i] (i为物品编号)\)个,同时第 \(ith\) 物品价值为&amp;i&amp;,现在问你能否将这些物品分成两堆,使得每堆的价值相同 思路: 我们可以用dfs去暴力搜索,当然这里使用多重背包的想法。即有 N 个物品 对应每个物品都有对应的 体积,能否找到任意 \(M\) 个把 体积为 \(tot/2\) (tot为总价值...

213

poj1014 Dividing (多重背包)

转载请注明出处:http://blog.youkuaiyun.com/u012860063 题目链接:http://poj.org/problem?id=1014 Description Marsha and Bill own a collection of marbles. They want to split the collection among themselves so that...

1375
上一篇: Poj 1742 Coins(多重背包)
下一篇: for循环中的条件执行循序
TaiSung
博客等级 码龄15年 49粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值