题目链接 http://bailian.openjudge.cn/practice/4131/ 解题分析 这是一个基础的01背包问题,使用动态规划来解决,因为题目中给的M,也就是背包最大容量比较大,使用二维数组可能会超内存,所以可以使用滚动数组的方法节省空间。 状态转移方程: dp[i][j] = ...
分类:
其他好文 时间:
2020-03-28 19:56:43
阅读次数:
75
题意:给出一颗n个节点的树,这道题数据都是以1为根; 给出一个p,表示留下p个节点,要我们求出留下p个节点删除边的数量最少是多少 思路:树形dp dp【i】【j】 表示i这颗子树保留j个节点所需要删除边的数量最少的权值 那么dp【i】【1】就是把他所有儿子全部去掉,那么就是他son【】的个数 求出来 ...
分类:
其他好文 时间:
2020-03-28 18:14:43
阅读次数:
69
/* dp[i][j][k]表示到了第i颗子弹,cd1=j,cd2=k 的最优解 */ #include<bits/stdc++.h> using namespace std; #define N 1005 int cd1,cd2,n,b[N],dp[5][105][105]; int solve( ...
分类:
其他好文 时间:
2020-03-28 18:05:56
阅读次数:
61
这道题有着贪心的性质在里面,首先我们观察题目的变量,可以想到设计dp表示以该节点为根节点的子树的最小次数是多少 但是这样是不够的。我们继续观察,发现这道题虽然叶子节点必须染色,但是染色的顺序是不定的,所以我们可以先找到哪种情况是最小的。 因此定义dp[u][1]和dp[u][2]分别表示已被染色的子 ...
分类:
其他好文 时间:
2020-03-28 16:26:41
阅读次数:
94
题意:给出一颗树形图,每一条边都有一定权值,叶子节点里面有若干副画 现在有一个小偷要进去偷画,每一条边的权值就是走的时间,偷画需要5秒 给出警察到来时间,问最多能偷多少副画 思路:这是一道树形dp 我们遍历每个节点,从根节点dfs到叶子节点,那么如何进行状态转移呢 我们用一个dp【i】【j】表示在i ...
分类:
其他好文 时间:
2020-03-28 13:08:08
阅读次数:
74
B. A Funny Bipartite Graph 状压 dp ,利用了原题中选完左边点集,那么右边在 左边编号最大的那个数 之前的所有点都要选的性质,可以优化到 $O(n \cdot 2^n)$。由于懒得补,所以写个算法溜了。(逃 C. And and Pair 题目大意:给你一个数 n 的二进 ...
分类:
其他好文 时间:
2020-03-27 00:37:02
阅读次数:
108
关于dp数组大小,边界,循环上线,因为这几个值在代码化的时候是有关联的,一开始会觉得有点不清不楚的,但是这个问题本身只要理清楚一次就不会再有问题了。 两种方式都是可以的,这里建议使用dp[n+1][w+1]的方式建立数组, 有以下几个好处: 1.动态的数值不用加一减一(dp数组) 2.循环上限直接采 ...
分类:
编程语言 时间:
2020-03-26 21:48:59
阅读次数:
85
题意:给出一个图,图中有n个城市m条有向边; 让我们求出以某一城市为终点的情况下,能够走的城市的数量尽量多 求出以每一个城市为终点的时候的答案 思路:dp+拓扑排序。 首先题意没有说明图是无环图,假如此题有环的话,是无法解的(个人见解,对错还待考证) 于是,我们可以运用拓扑排序的性质,先将入度为0的 ...
分类:
其他好文 时间:
2020-03-26 21:31:11
阅读次数:
73
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。 注意:你不能在买入股票前卖出股票。 示例 1: 输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的 ...
分类:
其他好文 时间:
2020-03-26 19:27:26
阅读次数:
105
+ 解决最优化问题 多阶段决策 + pull: f(x)从之前的状态得到(数据不规则,更好用) + push:对于每个f(x),更新f(x)可以到达的所有位置的结论 + 使用条件: 大问题可以拆成若干小问题 1. 无后效性 与之前状态计算过程无关(只需要结果)"未来与过去无关" 2. 最优子结构 若 ...
分类:
其他好文 时间:
2020-03-26 13:50:56
阅读次数:
68