DP
dp算法
等待闪电
这个作者很懒,什么都没留下…
展开
-
状压dp
蒙德里安的梦想 求把NM的棋盘分割成若干个12的的长方形,有多少种方案。 例如当N=2,M=4时,共有5种方案。当N=2,M=3时,共有3种方案。 输入格式 输入包含多组测试用例。 每组测试用例占一行,包含两个整数N和M。 当输入用例N=0,M=0时,表示输入终止,且该用例无需处理。 输出格式 每个测试用例输出一个结果,每个结果占一行。 数据范围 1≤N,M≤11 输入样例: 1 2 1 3 1 4 2 2 2 3 2 4 2 11 4 11 0 0 输出样例: 1 0 1 2 3 5 144 51205原创 2020-08-19 18:07:04 · 125 阅读 · 0 评论 -
树形dp
原理: 由于树无向无环, 且点只能有一个前驱,则某颗树的状态可由其子树转移而来,通过递归即可求解。 没有上司的舞会 Ural大学有N名职员,编号为1~N。 他们的关系就像一棵以校长为根的树,父节点就是子节点的直接上司。 每个职员有一个快乐指数,用整数 Hi 给出,其中 1≤i≤N。 现在要召开一场周年庆宴会,不过,没有职员愿意和直接上司一起参会。 在满足这个条件的前提下,主办方希望邀请一部分职员参会,使得所有参会职员的快乐指数总和最大,求这个最大值。 输入格式 第一行一个整数N。 接下来N行,第 i 行表原创 2020-08-19 10:17:58 · 120 阅读 · 0 评论 -
区间dp
数字三角形 题目:给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 代码: #include <iostream> #include <algorithm> using namespace std; const int N = 5原创 2020-08-08 22:26:37 · 118 阅读 · 0 评论 -
背包问题汇总
01背包 #include<iostream> #include<algorithm> using namespace std; const int N = 10010; int f[N], v[N], w[N]; // f[i][j]: 前i种物品中,空间为j时的最大价值。 int main() { int n, m; cin >> n >> m; for(int i = 1; i <= n; i++)原创 2020-08-07 23:03:03 · 159 阅读 · 0 评论