摘要:
传送门 解题思路 先不考虑砝码质量相等的情况,设dp[i][j][k]表示前i个砝码选j个组成重量为k的方案数。 最后判断是否合法就从判断方案数是否为1,变成了是否等于C(cnt,i)。(cnt为某个数字的数量,i表示选取的数量)。 可以滚动掉一维数组。 最后一定要记得特判数字类型只有一种或两种的情 阅读全文
摘要:
简单版传送门 困难版传送门 解题思路 单调队列优化dp板子题。 但是要注意一开始把dp数组初始化成极小值。 AC代码 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> # 阅读全文
摘要:
传送门 解题思路 一开始想到的是类似0/1分数规划的方法进行二分。 后来发现答案可以贪心解决。 我们可以发现最后的答案一定是由若干权值和相同的集合组成的,因为若其中一个集合的点权和较大,则将其单独拿出来显然更优。 所以可以先dfs一遍用树形dp求出最大的集合的大小ans,再dfs一遍,若扫到某个集合 阅读全文
摘要:
传送门 解题思路 观察到一个点的点权最多有8个质因数,所以可以存下来进行dp。 设dp[u][i]表示以u为根的子树中的点到u的gcd为u的第i个质因数的倍数的最大距离。 是不是有点绕。多读几遍。我再加个括号。 设dp[u][i]表示 (以u为根的子树中的点) (到u的gcd为u的第i个质因数的倍数 阅读全文
摘要:
传送门 解题思路 树形dp。 用dp[i]表示i的子树中的节点到i节点的最大收益。 Q:如何保证路径上任意时刻的收益非负? A:其实不需要管。因为若某一时刻收益为负,则不会去走,而是从零开始。 AC代码 #include<iostream> #include<cstdio> #include<cst 阅读全文