首页 > TAG信息列表 > Dp
P3177 树上染色做题记录
树形 dp 好题。 做这题的思想历程: 定义 \(dp_{i,j}\) 表示以 \(i\) 为根的子树中,选择了 \(j\) 个节点的答案。感觉还要带上一维状态就是所有黑点距离 \(i\) 的距离,这违反了做题思路中间的简洁性的原则。于是我们 查看题解。 经过不明方法之后,我们想到了定义 \(dp_{i,j}\) 对于答案Educational DP Contest A~Z
题目链接 To begin 本文章将从头分析 dp 阶段、状态、转移的设计,简单的话可以倒序查看。 其中,阶段的存在可以使我们找到状态之间的拓扑序,使状态之间的转移满足无后效性,从而可以正常进行转移。 而状态则需要我们将题目中给定的所有条件、属性完美涵盖,使得转移时状态不漏但也不重。AtCoder Beginner Contest 261 E
E - Many Operations 我们发现这个的位运算的顺序是不可以改变的 那我们就不能把后面的结果先算出来做 那怎么办呢 我们考虑数据范围给的是2的30次方 我们考虑拆位 我们可以发现 位数上仅有0/1 两种状态 30位 N是2e5 好像可以dp 我们就由此设置dp[i][j][k]为当前第j位为i(0/1)做前kCSP-S2019 划分(贪心,DP,单调队列 / 栈)
CSP-S2019 划分 \(n\) 数组 \(a\) 要求划分成若干段每段和递不减求最小每段和平方和。\(n \le 4 \times 10 ^ 7\)。 CODE 最后一段要求最小随便证。于是转为找最大转移点 \(f[i] = j\) 满足 \(i \ge 2s[j] - s[f[j]]\)。单调队列即可。Codeforces Round #820 (Div. 3) G(字符串 + dp)
Codeforces Round #820 (Div. 3) (字符串 + dp) 题意 两个字符串,一个原串,一个模板串。将原串中所有模板串的最小次数和所有方案数是多少。数据量 \(500\) 思路 考虑对原串中每一个出现的模板串dp。 定义 \(dp[i]\) 表示删除前 \(i\) 个模板串且最后删了 \(i\) 的最小操作次数。 转移BZOJ 2259 新型计算机(BIT优化DP)
Problem 原题 题意:你有一个序列,一个位置上的数 \(x\) 可以覆盖接下来的 \(x\) 个数,你可以修改一些数,代价就是改变的大小,求覆盖这个序列的最小代价和。 Solution 拿这题练了一下BIT优化DP,感觉还挺有意思的,所以写写。 首先考虑朴素 dp,令 \(dp[i]\) 表示完全覆盖 \([i,n]\) 的最小代CF868F Yet Another Minimization Problem 题解
CF8658F 题意 一个长度为 \(n\) 的序列,要分为 \(m\) 段,每段代价为段内相同数的对数,求总代价的最小值。 分析 设 \(cal(i,j)\) 表示段 \([i,j]\) 内的相同的数的对数,\(dp_i\) 表示当前最后一段以 \(i\) 为末端的最小总代价,则有转移方程: \[dp_i=\min\limits_{j=1}^{i-1}\{dp_j+cal(iP5628 【AFOI-19】面基 (dp + 容斥)
P5628 【AFOI-19】面基 (dp + 容斥) 题目传送门 题目大意:略 题目分析: 首先我们观察数据范围,我们发现给定的图是一棵树,那么我们可以直接 \(dfs\) 来计算重要度,根据乘法原理可知。对于某条边的重要度为边两侧的节点个数的乘积。 接下来我们考虑用 \(dp\) 来进行求解,我们令 \(f_{i,j}\)P4655 [CEOI2017] Building Bridges 题解
P4655 分析 发现如果在 \(i,j\) 之间建桥,那么 \((i,j)\) 内的所有柱子都是无用的,代价还需加上 \((i,j)\) 内的所有拆除代价。设 \(dp_i\) 为从 \(1\) 走到 \(i\) 的最小代价,于是转移方程就呼之欲出了: \[dp_i=\min\limits_{j=1}^{i-1}\{dp_j+(h_i-h_j)^2+s_{i-1}-s_j\} \],其中 \(s_LeetCode 416. 分割等和子集
01背包 const int N = 20010; class Solution { public: int dp[N]; bool canPartition(vector<int>& nums) { int sum = 0; for (int i = 0; i < nums.size(); i ++) sum += nums[i]; if (sum % 2 != 0) return false;Sugoroku 3
Problem StatementThere are $N$ squares called Square $1$ though Square $N$. You start on Square $1$. Each of the squares from Square $1$ through Square $N-1$ has a die on it. The die on Square $i$ is labeled with the integers from $0$ through $A_i$, each「REMAKE系列」线性dp篇
常见模型、技巧总结 LIS、LCS模型 LIS 结论题 \(I\) [HAOI2006]数字序列 习题 洛谷——「能力综合提升题单-线性DP篇」 P2501 [HAOI2006]数字序列 省选/NOI- LIS、结论 现在我们有一个长度为 \(n\) 的整数序列 \(a\)。但是它太不好看了,于是我们希望把它变成一个单调严格上升的CF1327F AND Segments
CF1327F AND Segments 洛谷:CF1327F AND Segments CF:CF1327F AND Segments Solution 原问题可以拆位分成 \(k\) 个子问题,答案为每个问题的方案数之积。 这些子问题均为:给定 \(m\) 个区间,要求这些区间的与值为 \(0\) 或 \(1\)。 区间赋值用差分解决。 对于限制为 \(1\) 的区间,其中的博弈选择字符串求最小字典序胜利
因为只有选择而且问的是先手 先手只有两个情况:赢1或者平局0 当长度为2时候 字符串相等的时候就平局 不然就先手肯定选到赢的情况 如果先手选择i 而且当(i+1,j-1)是赢的情况的时候就肯定赢 而且当(i+2,j)是赢的情况的时候就肯定赢 要么当(i+1,j-1)是平的情况的时候后手选择j 而s[i]Mondriaan's Dream(状压dp)
Mondriaan's Dream(状压dp) 题目大意:用1x2的方块填满NxM的大矩形,问填满的方法有多少种。解题思路:利用先填好竖着的方块,剩下的空格再用横着的来填,且要求填好竖着的方块时,每一行都要能用横着的方块填满(即连续的空出来的位置必须是偶数,即合法) AC代码 #include <cstdio> #include <cstUVA11584 划分成回文串 Partitioning by Palindromes
题面 这道题一开始想用简单的区间DP #include<stdio.h> #include<iostream> #include<cstdlib> #include<string.h> #include<algorithm> using namespace std; int T; char s[2000]; int dp[1010][1010]; int palind(int l,int r)//回文判断函数 { whAtCoder Regular Contest 148 B - dp
题面 For a string \(T\) of length \(L\) consisting of d and p, let \(f(T)\) be \(T\) rotated \(180\) degrees. More formally, let \(f(T)\) be the string that satisfies the following conditions. \(f(T)\) is a string of length \(L\) consistingCodeforces Round #814 (Div. 2) A-F
Codeforces Round #814 (Div. 2) 传送门 A 题意:棋子在左下角,两个人轮流操作,每次可以向上或向右移动奇数位,谁先无法操作谁输,给定棋盘大小,问最后谁赢。 分析:直接\((n+m)\&1\)即可。因为总共移动\(n+m-2\)次,以为移动奇数位,故在两个人移动后\(n+m-2\)的奇偶性不变,所以当总路程为偶数时Codeforces *2400 做题记录
CF1715E 题解 题意 一个带边权无向图,可以沿着边走,需要边权的花费或从任意点 \(u\) 飞到 \(v\),需要 \((u-v)^2\) 的花费。求从点 \(1\) 到所有 \(i\) 的最少花费。最多飞 \(k\) 次。 分析 一眼最短路 + dp。 发现 \(k\) 很小,可以枚举飞的次数,对于点 \(u\),可以是走到 \(u\),这种情况198. 打家劫舍
198. 打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的Luogu3354 河流 - 树形dp -
题目链接:https://www.luogu.com.cn/problem/P3354 题解: 考虑树形dp 设\(f[i][j][k]\)表示考虑到 i 点,j 是i的祖先中与i最近的伐木场,i及子树中共有 k 个伐木场的最小代价 我们发现,这样设状态无法表示 i 是否有伐木场这个条件,因此钦定 f[][][] 表示 i 没有伐木场,g[][][]表示有 转移【ZJSU - 大红大紫:ACM - Template】比赛用模板08(W):动态规划
动态规划 \(\tt{}0/1\) 背包 \(N\) 件物品中选取,使得选取物品总体积不超过 \(M\) 的前提下,使得物品的价值总和最大。每种物品一件, \(\mathcal{O}(N*M)\) 。 int n, m, dp[N]; int v[N], w[N]; void Zero_bag() { cin >> n >> m; for (int i = 1; i <= n; ++ i) cin >> v[iI Hate Non-integer Number(DP)
题意 有一个包含\(N\)个元素的数组\(A\). 有\(2^N - 1\)种方式从中选择至少一项。问其中有多少满足平均值为整数。 题目链接:https://atcoder.jp/contests/abc262/tasks/abc262_d 数据范围 \(1 \leq N \leq 100\) 思路 如果选中了\(x_1,x_2,\dots, x_i\),那么它们的平均值为\(\frac{139. 单词拆分
139. 单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 示例 1: 输入: s = "leetcode", wordDict = ["leet", "code"] 输出: true 解洛谷 P1044 [NOIP2003 普及组] 栈(dp)
https://www.luogu.com.cn/problem/P1044 给定一个n,在满足栈的出度入度条件下,求符合条件的permutation数量。 输入 3 输出 5 #include<bits/stdc++.h> using namespace std; typedef long long LL; const int N=2002000,M=2002; const int INF=0x3f3f3f3f; LL f[M][M]; int main