背包问题
big up
这个作者很懒,什么都没留下…
展开
-
uva10280
题目大意: 给L升酒,有n个酒瓶,每个酒瓶有个最大容量和最小容量,酒瓶的个数不限。 问最多剩多少毫升酒没有装进去。思路: 完全背包+剪枝 只要问题中含有数量不限且问最多最少问题的都属于完全背包问题。 剪枝 limit=min{min*min/(max-min)}。 对于同一种的瓶子,如果我们用k个瓶子去装酒的话,那么可以装下的酒的范围是[k * min,k max],随着k不断原创 2016-03-08 21:54:05 · 255 阅读 · 0 评论 -
uva562 平分纸币
题目大意: 有一堆纸币要平分给两个人,要求他们两个之间的差值尽量的小。思路: 类似于背包问题,将纸币的和当作是体积,从sum/2开始逆序减算出最大的重量(即dp[sum/2]),然后利用sum - 2 * dp[i] 得出的就是答案了。 忘记初始化dp WA 代码:#include <iostream>using namespace std;#include <stdio.h>#inc原创 2016-02-25 19:06:20 · 419 阅读 · 0 评论 -
uva10130
题目大意: 超市大减价,全家一起去买东西,求能带回的价值最多是多少。 给出了几个人,和每个人可以承受的重量。思路: 背包问题代码:#include <iostream>using namespace std;#include <cstring>#include <stdio.h>int MW[105];int P[1005],W[1005];int dp[40];int main原创 2016-02-25 21:52:51 · 341 阅读 · 0 评论 -
uva10465 完全背包
题目大意: 一个人可以花m分钟吃一种汉堡,可以花n分钟吃另外一种汉堡,问在t时间内最多可以吃几个汉堡 应该尽可能的不浪费时间,如果真的非得浪费时间就用这些时间喝啤酒。输出喝啤酒的时间。思路: 背包+贪心 完全背包代码:#include <iostream>using namespace std;#include <stdio.h>#include <cstring>int dp[10005原创 2016-02-26 17:09:58 · 256 阅读 · 0 评论 -
关于要求一串数字不超过某个数字可以达到的最大和(DP背包问题)
类似题目: uva562 uva624可以先将所有的值加起来,然后两层for。 外面一层是关于值的循环,里面一层是关于还有多少容量的循环。 for(int i = 1; i <= n ; i++) { for(int j = sum; j >= a[i]; j–) { dp[j] = max(dp[j],dp[j - a[i]]+a原创 2016-05-12 19:41:13 · 612 阅读 · 0 评论 -
uva10304(二维完全背包DP)
题目大意: 给出一个n和s,然后给出n组x和y,每组都有无数个,求出最少的x和y使得 x^x + y^y == s^s其中x是选出的所有x的和,y是选出的所有y的和思路: 完全背包。 代码:#include <iostream>using namespace std;#include <cstring>#include <stdio.h>const int INF = 0x3f3f3f3原创 2016-05-15 20:31:41 · 297 阅读 · 0 评论