Relocation POJ-2923】的更多相关文章

题目大意:有个人需要搬家,有N件物品,给个物品的重量是 w[i] 然后又两个车,每个车的载重量分别是C1和C2,求最少需要运输多少次才能把这些物品全部运输完毕. 分析:刚开始就发现物品数不多,想着直接先枚举一辆车运输的物品,然后计算它运输这些物品需要多少次,不过后来发现复杂度有点高,另一种比较好的解法是先枚举两个车一次可以运走的物品,然后再去用这些可以运走的状态去相互匹配转移,dp[i]表示达到状态i最少的运输次数,求是否能一次运输某个状态也是简单的01背包问题. 代码如下: =========…
题目链接:http://poj.org/problem?id=2923 题目的大概意思是,有两辆车a和b,a车的最大承重为A,b车的最大承重为B.有n个家具需要从一个地方搬运到另一个地方,两辆车同时开,问最少需要搬运几次? 我先想的是我由A车开始搬,搬运能装的最大的家具总重,然后状态压缩记录下搬运了哪些,然后再由B车搬运,状态压缩记录搬运了哪些.以此类推,直到状态满了. 以上方法TLE 然后,实在想不出来了,看了题解:http://blog.csdn.net/woshi250hua/articl…
题目链接:http://poj.org/problem?id=2923 题目意思:给出两部卡车能装的最大容量,还有n件物品的分别的weight.问以最优方式装入,最少能运送的次数是多少. 二进制表示物品状态:0表示没运走,1表示已被运走. 枚举出两辆车一趟可以运出的状态.由于物品是一趟一趟运出来的.所以就可以由一个状态通过两辆车一趟的状态转移到另一个状态. dp[i]=MIN(dp[k]+1).k可以由两车一趟转移到i. 我是参考此人的:http://blog.csdn.net/bossup/a…
题意:有人要搬家,有两辆车可以运送,有若干家具,车有容量限制,而家具也有体积,那么如何运送会使得运送车次最少?规定两车必须一起走,两车一次来回只算1躺. 思路:家具怎么挑的问题,每趟车有两种可能:1带走此家具:2此趟暂时不带走.那就是01背包了.但是限制是两只车的容量.求的是趟数. 1)数据量较小,将这10件以内的所有物品的可能组合记录一下,有2^10种,其中是包含了一些运不走的组合,滤掉,只留下可能的组合.对每种可能的新组合进行01背包,即考虑对于新组合i这种运送方案该不该取,如果取了能使车次…
题意是给你n个物品,每次两辆车运,容量分别是c1,c2,求最少运送次数.好像不是很好想,我看了网上的题解才做出来.先用状压DP计算i状态下,第一辆可以运送的重量,用该状态的重量总和-第一辆可以运送的,如果小于c2,那么可以一次运送i状态里的货物.然后再用DP把s[i]为i状态的运送次数,通过转移方程s[i | j] = min{s[i | j] ,s[i] + s[j]}计算出全部运送过去的最少次数. #include<cstdio> #include<cstring> #incl…
题意:有n个(n<=10)物品,两辆车,装载量为c1和c2,每次两辆车可以运一些物品,一起走.但每辆车物品的总重量不能超过该车的容量.问最少要几次运完. 思路:由于n较小,可以用状态压缩来求解.   家具从左到右依次对应二进制形式的低位到高位,该位上为1表示该家具还没运走,0表示已经运走.   建立两个数组,s1[],s2[],分别存储一次性能被货车1和货车2运走的状态.   之后再把s1,s2数组中的状态合并一下,存入到s数组中去,即表示能一次性被两辆货车同时运走的状态.         合并…
题目大意:有n个物品,有两辆车载重分别是c1,c2.问需要多少趟能把物品运完. (1 ≤ Ci ≤ 100,1 ≤ n ≤ 10,1 ≤ wi ≤ 100). 题解:n小思状压.我们先把所有一次可以拉走的状态ini预处理好,然后把这些状态当做一个个物品跑背包就行了. 合并的转移:dp[j|ini[i]]=min(dp[j|ini[i]],dp[j]+1); 就是如果状态j与ini[i]不冲突,则可以从状态j运一趟变为j|ok[i]. 然后正确性可以YY一下:为什么可以看成是物品?并一下就可以?是…
题目链接:https://vjudge.net/contest/103424#problem/I 转载于:>>>大牛博客 题目大意: 有 n 个货物,并且知道了每个货物的重量,每次用载重量分别为c1,c2的火车装载,问最少需要运送多少次可以将货物运完. 解题分析: 物品个数最多是10个,可以用0和1分别表示物品是否被选中运送 假设有3个物品,那么可以用001表示当前这一次选择将第3个物品运走 那么,所有的状态可以用0~2^n-1对应的二进制数表示出来 对于上述每一种状态,选择其中可以一次…
Q: 如何判断几件物品能否被 2 辆车一次拉走? A: DP 问题. 先 dp 求解第一辆车能够装下的最大的重量, 然后计算剩下的重量之和是否小于第二辆车的 capacity, 若小于, 这 OK. Description Emma and Eric are moving to their new house they bought after returning from their honeymoon. Fortunately, they have a few friends helping…
题意:给你汽车容积c1,c2,再给你n个包裹的体积,问你最少运几次能全运走 思路:用2进制表示每次运送时某物在不在此次运送之中,1在0不在.我们把运送次数抽象成物品价值,把状态抽象成体积,用一个dp[ i ] 记录完成状态i的最少步数那么就转化为了01背包问题,得到状态转移方程dp[ j|state ] = min( dp[ j|state ],dp[j] + 1 ),state为运送时物品的状态. 然后讲一下可能会有点看不懂的judge()的一段代码 for(int j = c1;j >= v…