DP
  • 2025-01-06题解:P11507 [ROIR 2017 Day 1] 计算器
    P11507[ROIR2017Day1]计算器思路简单的动态规划。\(dp_{i,j,k}\)表示使用了\(i\)次按钮A,\(j\)次按钮B和\(k\)次按钮C。转移式:\[\begin{cases}dp_{i+1,j,k}=\min(dp_{i+1,j,k},\lfloordp_{i,j,k}\div2\rfloor);\\dp_{i,j+1,k}=\min(dp_{i,j+1,k},\lfloo
  • 2025-01-06计数问题选讲做题记录
    计数杂题。calc考虑先不管数字之间的顺序,最后给答案乘上一个\(n!\)。记\(dp_{i,j}\)表示前\(i\)个数在\([1,j]\)之间选,所产生的总贡献,显然有\(dp_{i,j}=dp_{i,j-1}+j\timesdp_{i-1,j-1}\),最后的答案是\(dp_{n,k}\)。发现\(dp_n\)是一个\(2n\)次多项式,拉插一下
  • 2025-01-0601背包问题 Golang实现
    背包问题的分类:01背包描述:有n件物品和一个最多能背重量为w的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。思路分析:问题核心:从给定的
  • 2025-01-06二项式 & 容斥原理学习笔记
    容斥原理先从容斥原理开始。容斥原理的结论如下:\[|\bigcup\limits_{i=1}^{n}S_{i}|=\sum\limits_{m=1}^{n}(-1)^{m-1}\sum\limits_{a_{i}<a_{i-1}}|\bigcap_{i=1}^{m}S_{a_{i}}|\]证明的思路是考虑一个元素在每一个\(\bigcap\limits_{i=1}^{m}S_{a_{i}}\)
  • 2025-01-06线段树优化 dp 学习笔记
    到底是什么算法让我觉得两道题就足以让我写一篇学习笔记呢?虽然两年半以前写过一道dp,正解的优化是单调队列,但是我拿线段树过了(卡着空间过的),所以那个dp并不能叫线段树优化dp。CF115ELinearKingdomRaces这个算是最“原汁原味”线段树优化dp。设\(dp_{i,j}\)表示第\(j\)
  • 2025-01-0696. 不同的二叉搜索树 && 343. 整数拆分 Golang实现
    这两个题目的分析思路是十分类似的。都是进行一个拆分。1.不同的二叉搜索树题目描述:给你一个整数n,求恰由n个节点组成且节点值从1到n互不相同的二叉搜索树有多少种?返回满足题意的二叉搜索树的种数。示例1:输入:n=3输出:5思路分析:动态规划分析:确定状态:令dp[i]
  • 2025-01-06群论:Burnside引理和Polya计数
    相当抽象。这些是看了能有点懂的文章好文此文章的<置换>部分。此文章的<群>部分。此文章的<子群>部分。此文章写的很好,全文都能看。可以在上面三篇之前就看,但是内容比较简略。此文章写的比较好。此文章主要讲比较重要而且不好懂的部分。还有一篇带图的但是找
  • 2025-01-06Leetcode 3414. Maximum Score of Non-overlapping Intervals
    Leetcode3414.MaximumScoreofNon-overlappingIntervals1.解题思路2.代码实现题目链接:3414.MaximumScoreofNon-overlappingIntervals1.解题思路这一题算是一个比较常规的动态规划的题目吧。首先,我们将所有的区间进行排序,然后考察每一个区间是否选择的情
  • 2025-01-06二项式反演和容斥原理学习笔记
    容斥原理先从容斥原理开始。容斥原理的结论如下:$$|\bigcup\limits_{i=1}^{n}S_{i}|=\sum\limits_{m=1}{n}(-1)\sum\limits_{a_{i}<a_{i-1}}|\bigcap_{i=1}^{m}S_{a_{i}}|$$证明的思路是考虑一个元素在每一个$\bigcap\limits_{i=1}^{m}S_{a_{i}}$里出现的次
  • 2025-01-06E94 Tarjan边双缩点+树形DP P8867 [NOIP2022] 建造军营
    视频链接:E94Tarjan边双缩点+树形DPP8867[NOIP2022]建造军营_哔哩哔哩_bilibili  P8867[NOIP2022]建造军营-洛谷|计算机科学教育新生态//Tarjan边双缩点+树形DPO(n)#include<bits/stdc++.h>usingnamespacestd;intread(){intx=0,f=1;charc=getchar
  • 2025-01-0512.30~1.5 总结
    做题学习了莫队二次离线(未真正掌握)CF2034F2\(2^k\)的组合意义是选子集,这里把\(2^k\)再拆为\(1+2+\dots+2^{k-1}+1\)可以直接叠加关键点的贡献。那么一个关键点的贡献就变成了选后面的一个集合要求必须经过,这个可以dp。CF1463F显然(?)答案是关于前缀\(x+y\)个循环的。对
  • 2025-01-05题解:UVA10482 The Candyman Can
    UVA10482TheCandymanCan思路记总重量为\(sum\)。因为\(n\le32\)所以可以暴力。使用动态规划,\(dp_{i,j}\)代表第\(1\)组重量为\(i\),第\(2\)组重量为\(j\)(则第\(3\)组重量为\(sum-i-j\))是否可以达到。最后再暴力枚举取所有\(\max(i,j,sum-i-j)-\min(i,j,sum-
  • 2025-01-05数位DP简记
    更新日志2025/01/05:开工。概念一种按数位进行DP的方式。问题通常解决计数问题,给出一个数字区间,找要求的数个数。常见形式可以按数位从高到低递推,但更常见的是深搜。不容易错。我们通常传参“当前位数、是否有前导零、是否贴合上界”以及其他需要的参数。直接深搜必
  • 2025-01-05【C++动态规划】2088. 统计农场中肥沃金字塔的数目|2104
    本文涉及知识点C++动态规划LeetCode2088.统计农场中肥沃金字塔的数目有一个矩形网格状的农场,划分为m行n列的单元格。每个格子要么是肥沃的(用1表示),要么是贫瘠的(用0表示)。网格图以外的所有与格子都视为贫瘠的。农场中的金字塔区域定义如下:区域内格子数
  • 2025-01-05D. World is Mine 题解(动态规划, 思维)
    原题链接:https://codeforces.com/contest/1987/problem/D思路:动态规划,思维。A,B两人吃蛋糕,A吃的蛋糕要求美味度单调递增,所以决定她吃的蛋糕多少就是吃到的蛋糕美味度的种数。对于答案,A从美味度最小的开始吃,吃到该美味度的一块即有效,而B需要将这个美味度的所有蛋糕都吃掉才有
  • 2025-01-05Codeforces 319B Psychos in a Line 题解 [ 绿 ] [ 单调栈 ] [ 动态规划 ] [ adhoc ]
    PsychosinaLine:很好的单调栈优化dp题!观察我们先观察,一个精神病人会一直杀到什么时候。显然,会杀到右边第一个比他大的精神病人那里,然后他就杀不动了。因此我们可以从右往左考虑,算出左边的精神病人杀掉这个精神病人后左边的人的答案是什么。假设左边的人目前已经刀了\(x\)
  • 2025-01-05DP-子序列问题(待完善
    DP-子序列问题(待完善上升子序列定义:在一个序列\(a\)中满足$a_j<a_i$且\(j<i\)的子序列。\(e.g.\)在序列{\(0\)\(3\)\(2\)\(5\)\(1\)\(4\)}中{\(0\)\(1\)\(4\)}与{\(3\)\(5\)}便是其中两个上升子序列。最长上升子序列定义:在满足上升子
  • 2025-01-04模拟赛记录
    2025.1.4match估分:\(100+100+100+30=330\)实际:\(100+100+100+10=310\)总结:打得还好,但T4爆搜写错了,设了DP推不出来,流泪\fn简要题解T1注意到\(a+b=n\),直接贪心。如果\(a_i-b_i\)大,那么就选他的物理成绩,如果否则选他的生物成绩。codeT2考虑树形DP。定义\(dp_
  • 2025-01-0425年开篇之作---动态规划系列<七> 01背包问题
    目录一:背包问题的简介二:01背包问题1.模板题2.LeetCode经典例题一:背包问题的简介背包问题(Knapsackproblem)是⼀种组合优化的NP完全问题。问题可以描述为:给定⼀组物品,每种物品都有⾃⼰的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最⾼。
  • 2025-01-04动态规划<八> 完全背包问题及其余背包问题
    目录例题引入---找到解决问题模版LeetCode经典OJ题1.第一题 2.第二题 3.第三题 其余的一些背包问题1.二维费用的背包问题1.第一题2.第二题2.其余杂题例题引入---找到解决问题模版OJ传送门牛客DP42【模板】完全背包画图分析: 使用动态规划解决(第二问与
  • 2025-01-04数字分段(dp)
    给定数组,将数组分为尽可能少的段使得每一个段的第一个或最后一个数字是段的长度,求最少的段数线性dp令dp[i]表示将前i个数字全部分好段最少的段数dp[0]=0枚举每一个a[i],这个数字有两种分段方案:作为某个段的结尾:dp[i]=min(dp[i],dp[i-a[i]]+1)作为某个
  • 2025-01-04[AHOI2018初中组] 球球的排列
    前言紫题,启动!思路转化题意对于\(n\)个物品,每个物品拥有特征值\(a_i\),其编号为\(i\)一个合法的排列定义为:\(\foralli\in[1,n),a_{p_i}\cdota_{p_i+1}\)不是一个完全平方数求合法排列的数量这个题听别人讲过,一如既往地忘掉了怎么做呢?看了下
  • 2025-01-04数位翻转(dp)
    给一n个数字的数组,一个翻转操作将一个数按二进制形式翻转再转回十进制.问最多翻转m个连续段,完成后数组和最大为多少.先求贡献数组(翻转后能增加多少),然后问题转化为数组中选m个段和最大,这和最大连续子数组和是不同的(只有一个段).定义\(dp[i][j][0]代表在递推
  • 2025-01-04leetCode322.零钱兑换
    题目:给你一个整数数组coins,表示不同面额的硬币;以及一个整数amount,表示总金额。计算并返回可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。你可以认为每种硬币的数量是无限的。示例1:输入:coins=[1,2,5],amount=11输出:3解释:11=5+5+1思
  • 2025-01-03关于此题[ABC382E] Expansion Packs 概率DP的一些总结
    传送门首先看到这道题,我们发现想要求收集K个卡牌的期望开包数,必须要先求出每个包开出0~n张卡各自的概率,于是预示着这道题将要进行两次概率DP。首先我们求每个包开出0~n张卡各自的概率。这个很好求,我们假设f[i][j]表示前\(i\)张卡中开出\(j\)张卡的概率,那么显然有:\(f[i][j]=p[