Loading

随笔分类 -  动态规划

摘要:P1220 关路灯 区间DP 题意 道路上有$n$盏灯,每盏灯有两个属性,坐标和功率。 老张的速度为$1m/s$ 。 初始给出老张在第几盏灯。 当到达某盏灯时 老张可以花费$0$ 秒关掉一盏灯,确定一种路线使所有灯的耗能最小。 \[ n \leq 50,1\leq c \leq n \] 分析 令$ 阅读全文
posted @ 2020-09-18 13:31 MQFLLY 阅读(129) 评论(0) 推荐(0)
摘要:CodeForces-232B Table 组合数学 DP 题意 给定一个大小$N \times M $ 的棋盘 问有多少种方案使得每个$N \times N $ 的区域中恰好有$k$ 个棋子。 \[ N \leq 100,N \leq M \leq 10^{18},K \leq N ^2 \] 分 阅读全文
posted @ 2020-09-12 22:23 MQFLLY 阅读(188) 评论(0) 推荐(0)
摘要:CEOI2017 锯木厂选址 斜率优化状压DP 模拟退火 题意 一座山上有$n$ 棵树,山脚有一锯木厂,现要在这$n$个位置中再造两个锯木厂使得总耗费最小。耗费 = 这棵树的重量乘与锯木厂的距离。且只能向下运输。 \[ 2\leq n \leq 2 \cdot 10 ^ 4, 1 \leq w_i\ 阅读全文
posted @ 2020-09-07 15:40 MQFLLY 阅读(175) 评论(0) 推荐(0)
摘要:HDU-6447 YJJ's Salesman DP 树状数组优化 题意 在一个网格中,当前要求从$(0,0)\(走到\)(109,109)$ 。 只能从$(x,y)$ 走到$(x+1,y) or (x,y+1) or (x+1,y+1)$ 现存在$N$ 个点,到达这些点会增加$w$财富,问最终财富 阅读全文
posted @ 2020-09-05 21:27 MQFLLY 阅读(127) 评论(0) 推荐(0)
摘要:CodeForces-63E Sweets Game 博弈论,状态压缩,记忆化搜索 题意 给定一个长度为3的正六边形的棋盘,若为$O$ 则表示这个位置有糖果。 两人轮流吃糖果,每次可以选择在一条直线上的任意个糖果吃,不能吃的人为败者。 Input . . . . . O . . . O O . . 阅读全文
posted @ 2020-09-05 17:19 MQFLLY 阅读(212) 评论(0) 推荐(0)
摘要:超级码力在线编程大赛初赛 第1场 3.大楼间穿梭 单调栈,DP 题意 一座城市有$n$ 座高楼在城市的水平线上,楼高$h[i]$ 。蜘蛛侠要从第一座楼开始到第$n$ 座楼,蜘蛛侠有两种选择 花费$x$ ,选择跳到第$i+1$ 或者第$i+2$ 座楼 花费$y$ ,选择跳到接下来的$k$ 座楼中,第一 阅读全文
posted @ 2020-08-29 20:02 MQFLLY 阅读(270) 评论(0) 推荐(1)
摘要:ZOJ-3329 One Person Game 题意 有三个骰子,分别有$k1,k2,k3$ 个标号$1-k$ 的面,每次扔骰子,若三个面分别为$a,b,c$ 则分数置为0,否则加上分数之和。 当分数大于0时游戏结束,问游戏结束的期望步数。 分析 容易想到转移方程,令$dp[i]$ 表示当前分数为 阅读全文
posted @ 2020-08-28 11:48 MQFLLY 阅读(151) 评论(0) 推荐(0)
摘要:P1350 车的放置 思维 排列组合 题意 有下面这样的一个网格棋盘,\(a,b,c,d\) 表示了对应边长度,也就是对应格子数: 要在这个棋盘上放 \(k\) 个相互不攻击的车,也就是这 \(k\) 个车没有两个车在同一行,也没有两个车在同一列,问有多少种方案。 \[ 0\leq a,b,c,d, 阅读全文
posted @ 2020-08-24 22:48 MQFLLY 阅读(172) 评论(0) 推荐(0)
摘要:HDU-4532 湫秋系列故事——安排座位 组合数学,计数DP 题意 有个$n$ 个系分别有$num[i]$ 个学生,这些学生排排坐,位置总数恰好等于总人数。 问任意相同系的学生不能相邻坐的方案数 \[ 1 \leq n ,num[i]\leq 47 \\ 1\leq \sum num[i] \le 阅读全文
posted @ 2020-08-23 15:31 MQFLLY 阅读(257) 评论(0) 推荐(0)
摘要:Gym - 102470D Darts 概率DP,思维 题意 \(A,B\) 两人轮流扔飞镖,初始分数均为$N$ ,若射中的分数小于当前分数,则当前分数减去该分数,否则分数不变。 现使得分数为$0$ 的获胜, \(A\) 随机扔飞镖,每块的概率相等。 \(B\) 可以贪心的选择三块区域扔飞镖,每块的 阅读全文
posted @ 2020-08-22 21:57 MQFLLY 阅读(219) 评论(0) 推荐(0)
摘要:ZOJ-3640 Help Me Escape 概率DP 题意 有一个人要逃离一个洞穴,现提供 \(n\) 条出路,每条出路有危险值 \(c_i\) ,这个人的武力值为$f$ 。 每天这个人会随机一条路,若 \(f\) > \(c_i\) ,那么可以通过$t_i$ 的时间逃离这里 否则就要等下一天, 阅读全文
posted @ 2020-08-21 21:18 MQFLLY 阅读(95) 评论(0) 推荐(0)
摘要:POJ - 1985 Cow Marathon 【模板】 树的直径 树形DP 邻接表实现 树的直径 图中所有最短路径的最大值即为「直径」,可以用两次 DFS 或者树形 DP 的方法在 O(n) 时间求出树的直径。 做法2 树形DP 我们记录每个节点向下,所能延申的最远距离$d_1$ 和次远距离$d_ 阅读全文
posted @ 2020-08-20 23:08 MQFLLY 阅读(179) 评论(0) 推荐(0)
摘要:CF901B GCD of Polynomials 多项式 数论 题意 定义多项式的度$deg$ 为多项式的最高次数。对于多项式$A(x) = \sum_na_kxk$ 以及$B(x) = \sum_mb_kbk$ 有唯一的除法表示 \[ A(x) = B(x)\cdot D(x) + R(x) , 阅读全文
posted @ 2020-08-20 16:20 MQFLLY 阅读(304) 评论(0) 推荐(0)
摘要:HDU 4248 题意: 给定n种颜色不同的石子,每种石头有 num[i] 个。从中取石子,问能够得到多少种不同的序列。 \[ n \leq 100,num[i]\leq 100 \] 数据范围比较小,考虑dp \[ dp[i][j]表示选前i种石头,且选的石头总数为j时的不同序列个数 \] 有转移 阅读全文
posted @ 2020-08-20 13:20 MQFLLY 阅读(164) 评论(0) 推荐(0)
摘要:给定一个有 n 个节点和 m 条有向边的图。每个节点上有一个小写字母。 我们将路径的值定义为最经常出现的字母的数目。例如,如果路径上的字母是 “abaca”,那么该路径的值是 3。 你的任务是找到一条值最大的路径,并将这条路径的值输出。 显然条件是必须在一条路径上,容易想到限制要求拓扑排序,因此可以 阅读全文
posted @ 2020-08-18 21:36 MQFLLY 阅读(145) 评论(0) 推荐(0)
摘要:计算所有线段的所有子集的复杂度的和。 复杂度:线段集合的连通块个数。 连通块:不相交的并 考虑每个线段对前 i - 1个线段的贡献,若不选,则复杂度和不变,若选,则不相交的部分会贡献 2 ^ x 的复杂度。 故每次只需计算x的大小,x的大小可以建立前缀和数组来维护。 void Put(ll x) { 阅读全文
posted @ 2020-08-17 19:57 MQFLLY 阅读(132) 评论(0) 推荐(0)
摘要:在 n×n 的棋盘上放 kk 个国王,国王可攻击相邻的 88 个格子,求使它们无法互相攻击的方案总数。 状压DP是一种比较暴力的DP。 首先dp[i][j][k]表示前i行放置k个国王,且当前行状态是j的方案数。 转移方程 dp[i][j][k] = dp[i - 1][m][k - sum[k]] 阅读全文
posted @ 2020-08-11 19:23 MQFLLY 阅读(291) 评论(0) 推荐(0)
摘要:工具需要检测的号码特征有两个:号码中要出现至少 33 个相邻的相同数字;号码中不能同时出现 88 和 44。号码必须同时包含两个特征才满足条件。满足条件的号码例如:13000988721、23333333333、14444101000。而不满足条件的号码例如:1015400080、100100120 阅读全文
posted @ 2020-08-08 21:56 MQFLLY 阅读(113) 评论(0) 推荐(0)
摘要:题意:问给定的矩阵中形如绿色的块的个数。 红色是不合法的。第一个红没有全是同样的字母。第二个红越界。第三个红不是斜的45度 对矩形预处理。l[i][j]表示(i , j) 最大向上延伸的长度,其他同理。 mid[i][j] 表示这个点左右延申的最大长度。 用u[i][j]表示向上形成三角形的个数。 阅读全文
posted @ 2020-08-08 20:28 MQFLLY 阅读(240) 评论(0) 推荐(0)
摘要:求一个数组的m段的最大子段和。 dp[i][j] 表示 当前是第i段,且最后一个元素是a[j]时的最大子段和。那么有两种转移,作为第i段的最后一个元素 或者 第i段的第一个元素。 状态转移方程为dp[i][j]=max(dp[i][j-1]+a[j],dp[i-1][k]+a[j]) i-1<=k< 阅读全文
posted @ 2020-08-07 23:08 MQFLLY 阅读(119) 评论(0) 推荐(0)