动态规划
文章平均质量分 51
lyx_2016
蒟蒻,OIer
展开
-
【牛客contest16806 C】【状态压缩】【bitset】
题目链接 题目描述 一共有 n个数,第 i 个数是 xi xi 可以取 [li , ri] 中任意的一个值。 设 S=∑xi2S = \sum{{x_i}^2}S=∑xi2,求 S 种类数。 n, l, r 都是1~100 首先考虑暴力做法,因为n很小,暴力枚举是10^6 用dp[100][10^6] 这样一个数组来存结果。第一维i表示用了i个数,第二维j表示要凑出j这个数,dp[i[][j]取值只有0和1,表示这个数能不能凑出来。 首先bool数组可以用bitset来节省空间,bitset每位数只占1b原创 2021-06-14 21:37:01 · 157 阅读 · 0 评论 -
【CodeForces 1183H】【dp】【容斥】
题目链接 题目大意是给一个字符串s,找出最长的k个互不相同的子串 需要注意这道题里子串的定义,是可以不连续的几个字母,例如“asdf”有2^4个子串,分别是“asdf” “asd” “asf” “adf” “sdf” “as” “ad” “af” “sd” “sf” “df” “a” “s” “d” “f” “”(空串) n的范围是1~100, k的范围是1~10^12 最开始没好好看这道题里什么是子串,我以为必须是连续的字母,n的数据范围又小,暴力枚举就行 唉,不好好看题就急着写的下场 这样的话,我们考虑原创 2021-02-06 15:49:24 · 150 阅读 · 0 评论 -
【LeetCode834】【树形dp】每日一题day35
道题要求每个节点到其他所有节点的距离之和 先考虑一个节点到其他所有节点的距离之和的问题。看到距离首先我想到的就是最短路,但是树上没啥最短路_(:з」∠)_ 然后我就没想出什么行之有效的方法_(:з」∠)_ 看了题解是树形dp,那么问题来了,为什么呢?这道题也没有什么最值,看起来距离之和是一个很固定的东西,一点都不动态。 其实我觉得,与其说是dp,不如说是递推。这里的中心思想就是从叶子往上推,处理距离 distSum[root] = sigma(distSum[root'sChild] + childSum[原创 2020-10-16 11:16:13 · 201 阅读 · 0 评论 -
【LeetCode416】【DP】每日一题day33
好久不见~ 我一开始看到,元素和是一个定值嘛,我觉得可以转换成LeetCode40 组合总和II,找nums里面和为一个定值的元素,就写了回溯,结果超时了 class Solution { public: bool recall(int cnt, int sum, map<int, int> appearNumber, vector<int> nums) { if (sum == 0) return true; if (sum <原创 2020-10-12 10:36:27 · 92 阅读 · 0 评论