![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
【背包问题】
文章平均质量分 75
张松超
这个作者很懒,什么都没留下…
展开
-
HDU ~ 1864 ~ 最大报销额(01背包)
题目网址:最大报销额最大报销额Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Problem Description现有一笔经费可以报销一定额度的发票。允许报销的发票类型包括买图书(A类)、文具(B类)、差旅(C类),要求每张发票的总额不得超过1000元,每原创 2017-07-12 08:25:12 · 391 阅读 · 0 评论 -
HDU ~ 3339 ~ In Action (最短路 + 01背包)
题意:T组测试数据,N个发电站(1~N),M条边。然后M行输入这M条边。每个发电站有一定的发电量,下面N行依次输入这N个发电站的发电量。问我们要派出一些坦克去占领这些发电站,一台坦克只能占领一个发电站。坦克每走一公里耗费一升油。任务要求占领的发电站的总电量超过所有发电站的电量的一半。你一开始在0点,有无限辆坦克,我们完成任务最少花费多少油?如果不能完成任务,输出“impossible”。思路:先跑...原创 2018-03-12 20:54:25 · 268 阅读 · 0 评论 -
UVA ~ 624 ~ CD (DFS+剪枝)
题意:给你一个数字N,然后给你k,后面有k个数字,要用这k个数字凑出来最接近N但是不超过N的数字。思路:我们直接搜索,传两个参数,一当前累加和,二当前选到了哪个数字。外面开一个标记数组,标记该数字有没有被选过。全局维护一个最大值MAX,当MAX被更新时,我们把此时选择的数字存到ans数组里面。为什么要传当前选到了哪个数字呢,这是一个剪枝,没有该剪枝会超时。当我们选到第二个数字的时候没必要再往前挑选...原创 2018-04-07 14:29:59 · 178 阅读 · 0 评论 -
POJ ~ 1276 ~ Cash Machine (多重背包)
题意:给你一个面值cash,然后N种钱币,然后依次输入n[i],D[i]...,问用这些钱币组成最大的小于等于cash的值是多少?思路:多重背包,但是01背包要用到二进制优化。//#include <bits/stdc++.h>#include<iostream>#include<cstdio>#include<cstring>using n...原创 2018-04-18 16:40:28 · 242 阅读 · 0 评论 -
HDU ~ 1114 ~Piggy-Bank (完全背包 + 装满判断)
思路:在背包九讲中提到过,求背包装满时的,可能的最小/大价值,我们只需要将除0外的所有状态赋为极大值/极小值,dp[0]赋值为0,即可。因为,初始状态只有0状态的时候是合法状态。#include&lt;bits/stdc++.h&gt;using namespace std;const int MAXN = 10005;const int INF = 0x3f3f3f3f;int n,...原创 2018-06-10 16:55:14 · 383 阅读 · 0 评论 -
洛谷 ~ P1272 ~ 重建道路(树形背包)
思路我们转化一下,假设把所有的边先都删除,那么我们要考虑这条边是不是要加进去,这就是一个01背包+树形dp。定义deg表示uuu点的度数。定义dp[u][j]dp[u][j]dp[u][j]表示以uuu为根保留jjj个结点所需要删除的边数。dp[u][1]=deg[u]dp[u][1]= deg[u]dp[u][1]=deg[u]dp[u][j]=min(dp[u][j],dp[u][...原创 2018-11-14 10:53:59 · 250 阅读 · 0 评论 -
洛谷 ~ P1273 ~ 有线电视网 (树形背包)
思路c[i]c[i]c[i]表示该用户愿意支出的钱sz[u]sz[u]sz[u]表示以u为根节点的子树有多少个用户。sz[u]+=sz[v]sz[u] += sz[v]sz[u]+=sz[v]dp[u][j]dp[u][j]dp[u][j]表示以uuu为根节点,转发到uuu个用户利润的最大值如果uuu为叶子结点即用户,则dp[u][0]=c[i]dp[u][0]=c[i]dp[u][0...原创 2018-11-14 21:03:36 · 213 阅读 · 0 评论