![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划 - 背包
flowser
you are what you want to be
展开
-
uva624 - CD(01背包+打印路径)
题意: 一个数n,及n个数,让你求n个数中取哪些数可更接近n 思路: 01背包,不过要打印路径。 打印路径的话,就看dp[i][j]是否=dp[i-1][j-a[i]]+a[i]],即是不是装了当前背包,装了就j-=a[i],这样从尾向头遍历并标记即可。 代码如下:#include <iostream>#include <cstdio>#include <cstring>#inclu原创 2016-03-18 23:22:16 · 428 阅读 · 0 评论 -
uva 10130 - SuperSale(01背包)
题意: 超市降价,全家m个人,能分别拿重量不超过per[i]的东西,n个物品(价格,重量),每个人一个物品最多拿一个,问全家在承重范围内能拿到东西的总最大价值。 思路: 01背包,思路同前几题。 代码如下:#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace原创 2016-03-18 23:27:00 · 272 阅读 · 0 评论 -
uva10465- Homer Simpson(完全背包)
题意: 给你数a[1],a[2]和t,让你求x个a[1]+y个a[2]能得到的最接近t的数。 思路: 完全背包题,t为背包最大受重,然后和01背包仅一个不同:01背包内部是逆序,它则为逆序。原因是:之前uva562http://blog.csdn.net/conatic/article/details/50927306 提到的不能用顺序的原因是怕小的硬币影响大的,这里背包可以重复拿,不存在影原创 2016-03-18 23:37:34 · 300 阅读 · 0 评论 -
uva562 - Dividing coins(01背包)
题意: 给你一堆硬币,让你分成两堆,分别给A,B两个人,求两人得到的最小差。 思路: 这题可以用背包写,只要把背包总重量当做sum/2就好,然后就看能选硬币最接近却又不超过sum/2的值为多少。这题原来用二维,dp[i][j]=max(dp[i][j],dp[i-1][j-a[i]]+a[i]),但看到空间上可降低复杂度的方法,就决定以后都用下面这种,d,p[i]表示背包容量为i的时候,能装的原创 2016-03-18 23:03:43 · 808 阅读 · 0 评论