```#include#include#includeusing namespace std;const int N=15;int len;int d[N];int f[N][N];int dfs(int pos,int pre,bool lead,int limit){ if(!pos) retu... ...
$其实思路都能想到一点,就是去重这里特别麻烦,没有好的思路。$ $设dp[i][j]为以i为根深度为j的节点数量$ $dp[parent][j]=\sum{dp[son][j 1]}$ $然后把每个节点作为转折点求答案$ ...
分类:
其他好文 时间:
2020-05-04 17:28:14
阅读次数:
69
当时参加周赛的时候没做出来,后来通过看题解,学习到了状态压缩dp,对于这一题是理解了,但是状态压缩dp运用的还不是特别好。记录一下解题过程。 来源:力扣(LeetCode) 链接:https://leetcode cn.com/problems/number of ways to wear diff ...
分类:
其他好文 时间:
2020-05-04 15:10:39
阅读次数:
98
利用在数组长度N很大的情况下能达到压缩存储的作用。一般还是用在DP题目和递归中,因为DP题目是一个自下而上的扩展过程,我们常常用到是连续的解,而每次用到的只是解集中的最后几个解,所以以滚动数组形式能大大减少内存开支。 比如:斐波那契数列 #include<iostream> using namesp ...
分类:
编程语言 时间:
2020-05-04 15:03:11
阅读次数:
56
题: 题意:给定n组,每组ai个红果,bi个白果。还给定整数k,代表组成同一盆要达成的数目,同时组成同一盆的水果要么是来自同一组,要么就是有相同颜色,问最大能组成多少盆 分析:初步地,我们可以只是按照颜色来分组,那么答案就是suma/k+sumb/k,那么就剩下不足k个的红果和不足k个的白果,这时我 ...
分类:
其他好文 时间:
2020-05-03 21:52:44
阅读次数:
66
LINK: "随机树" 非常经典的期望dp. 考虑第一问:设f[i]表示前i个叶子节点的期望平均深度。 因为期望具有线性性 所以可以由每个叶子节点的期望平均深度得到总体的。 $f[i]=(f[i 1]\cdot (i 1)+(f[i 1]+1)\cdot 2 f[i 1])/i=f[i 1]+2/i ...
分类:
其他好文 时间:
2020-05-03 20:44:44
阅读次数:
55
```#include #include #include #include using namespace std;const int N = 3030;int h[N], e[N], ne[N], w[N], idx;int val[N];int n, m;//n为整个有线电视网的结点总数,m为... ...
分类:
其他好文 时间:
2020-05-03 20:25:08
阅读次数:
58
这题主要问题是有些地方有钥匙,这种类型我们之前在bfs种做到过,就是用状压dp多枚举一维钥匙就行了,因为钥匙不需要时间,所以每次走到取完钥匙肯定是最优的 本题是二维的,不过转成一维更方便。我们的dis数组原先记录的是点,现在记录的是点和状态。建图是,先建门,将门与墙都插入一个set便于查询 建完这两 ...
因为这道题只能买卖一次,所以我们可以用dp的思想去分段,也就是以某个位置i作为分段点 从1-i能找到的最小值和从n-i能找到最大值,答案就是差值,因为两者没有约束。这样可以包含所有情况,虽然要重复。 问题是如何求去,因为本题有环,所以我们不能真的dp求,而dp其实就是dag的最x路,因此我们可以想到 ...
题目背景 缩点+DP 题目描述 给定一个 nnn 个点 mmm 条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大。你只需要求出这个权值和。 允许多次经过一条边或者一个点,但是,重复经过的点,权值只计算一次。 输入格式 第一行两个正整数 n,mn,mn,m 第二行 nnn 个整数, ...
分类:
其他好文 时间:
2020-05-03 12:40:25
阅读次数:
60