POJ
文章平均质量分 72
拾贝壳的小顽童
五月开始拾贝壳九月中旬见分晓
展开
-
POJ 1276 cash machine
分析:题目的意思是,给出需要的总金额和每种面值钱的数量,求能够获得的接近总金额的最大的金额。总金额0 又是一道多重背包的问题,毫无压力。写个代码练练手吧~ #include using namespace std; int F[100001]; int n[11]; int D[11]; int max(int a, int b) { return a>b?a:b; } void原创 2013-05-16 19:48:03 · 959 阅读 · 0 评论 -
POJ 1014 dividing
分析: 如果想要公平的分得弹球,那么弹球的价值总和一定是偶数,可以先进行判断弹球的价值总和,若是奇数则不需要做下面的判断。 如果是偶数,我们可以把这个问题映射为多重背包问题,并且这个背包是要求完全装满的。背包的总容量V就是所有弹球总价值和sum的一半,弹球的cost和weight都是其编号。个数则是由外界输入的。最后进行判断:如果得到的F[V]确定的等于sum/2,则说明能够公平的分弹球。原创 2013-05-16 16:11:30 · 1592 阅读 · 0 评论 -
POJ 1384 PigBank
题意:题目的意思是有一个储蓄罐,里面放了硬币,只知道储蓄罐装了硬币和没装硬币时的重量,并且知道每种面值硬币的重量。现在要求储蓄罐中可能的最小金额。若储蓄罐中硬币的重量和每种面值硬币的重量不能匹配,则输出impossible。 分析:这又是一道典型的完全背包问题,因为我们可以认为储蓄罐中每种面值的钱币是任意多的。这道题只是把求最大值改为了求最小值。并且背包要求完全装满。这个时候要注意初始化的时候不原创 2013-05-17 11:00:56 · 1493 阅读 · 1 评论 -
POJ 1976 A Mini Locomotive
题意:有三个火车头,每个最多能拉k个车厢,一共有n个车厢,每个车厢里都有乘客,每个火车头拉的车厢都是连续的。问能拉的最多的乘客数。 分析:先一看好像没有什么思路,然后用动态规划的思想慢慢想: 假设F[i][j]表示用i个火车头在前j个车厢中能拉的最大乘客数。考虑第j个车厢被拉还是不被拉~可得状态方程: F[i][j] = max(F[i][j-1], F[i-1][j-k]+b[j]) b原创 2013-05-17 21:37:38 · 869 阅读 · 0 评论 -
POJ 1742 coins
题意:给出几种面值的钱币和对应的个数,看能否凑出1-m中的各个面值。 分析:显然,多重背包问题。要求全部装满。而且对1-m遍历并计数,毫无压力~ 上代码:#include using namespace std; int MIN_INT = (~(unsigned(-1)>>1)); int F[100001]; int A[101]; int C[101]; int max(int原创 2013-05-17 15:50:45 · 1168 阅读 · 0 评论 -
POJ 1787 Charlie's Change
题意:给定一个数P,要求用四种币值为1,5,10,25的硬币拼成P,并且硬币数要最多。 分析:这是一个多重背包问题,但是要转换一下思路,现在要求硬币数量最多,那么P是背包容量,硬币面值是cost,硬币数量是weight。多重背包问题加上used数组可以转换为完全背包问题,这样可以减小复杂度。还有就是要记录各种面值的硬币使用了多少次,这就需要记录路径。 代码: #include using原创 2013-05-17 18:25:24 · 1116 阅读 · 0 评论 -
2184 cow exhibition
题意:给出N组数,每一组有Si和Fi两个数,从中选出若干组,使得Si的和TS与Fi的和TF相加最大,并且TS和TF都必须大于等于0。Si和Fi从-1000到1000。 分析:这又是一道典型的背包问题。我们这么想,设dp[i][j]是前i组数的TS为j时,TF的最大值。这样就把TS当成了体积,把TF当成了价值。只不过体积也是会不断变化的,不确定到底体积是多少,但一定是大于等于0的。因为Si从-10原创 2013-05-18 12:40:21 · 802 阅读 · 0 评论