随笔分类 - 动态规划 一般DP
摘要:【题目】 "1510 最小化序列" 【题意】给定长度为n的数组A和数字k,要求重排列数组从而最小化: $$ans=\sum_{i=1}^{n k}|A_i A_{i+k}|$$ 输出最小的ans,$n \leq 3 10^5,k \leq 5000, 10^9 \leq A_i \leq 10^9$
阅读全文
摘要:【题目】 "BZOJ 2111" 【题意】求有多少1~n的排列,满足$A_i A_{\frac{i}{2}}$,输出对p取模的结果。$n \leq 10^6,p \leq 10^9$,p是素数。 【算法】计数DP+排列组合+lucas 【题解】令i的父亲为i/2,转化为要求给一棵n个点的完全二叉树编
阅读全文
摘要:【题意】n位同学(其中一位是B神),m门必修课,每门必修课的分数是[1,Ui]。B神碾压了k位同学(所有课分数<=B神),且第x门课有rx-1位同学的分数高于B神,求满足条件的分数情况数。当有一位同学的一门必修课分数不同时视为两种情况不同。n,m<=100,Ui<=10^9。 【算法】计数DP+排列
阅读全文
摘要:【题目】F. Group Projects 【题意】给定k和n个数字ai,要求分成若干集合使得每个集合内部极差的总和不超过k的方案数。n<=200,m<=1000,1<=ai<=500。 【算法】动态规划 【题解】每个集合的最小值和最大值非常重要,将序列从小到大排序后,每个集合可以视为最小值到最大值
阅读全文
摘要:【题目】H. Ember and Storm's Tree Game 【题意】Zsnuoの博客 【算法】动态规划+排列组合 【题解】题目本身其实并不难,但是大量干扰因素让题目显得很神秘。 参考:Zsnuoの博客 一、首先Ember必胜(考虑n个点连成一条链),故合法的树一定满足先手必胜。当Storm
阅读全文
摘要:【题目】C. Maximum Element 【题意】给定n和k,定义一个排列是好的当且仅当存在一个位置i,满足对于所有的j=[1,i-1]&&[i+1,i+k]有a[i]>a[j],求长度为n的好的排列数。n<=10^6。 【算法】排列组合+动态规划 【题解】设D(n)表示长度为n且满足a[n]=
阅读全文
摘要:【题目】C. Bear and Company 【题意】给定大写字母字符串,交换相邻字符代价为1,求最小代价使得字符串不含"VK"子串。n<=75。 【算法】动态规划 【题解】关键在于表示状态,我们将确定下来的前若干个固定作为状态,后面新加的字符不会进入固定的前若干个。(为了方便,非'V''K'的字
阅读全文
摘要:【题意】给定n个原串和m个禁忌串,要求用原串集合能拼出的不含禁忌串且长度为L的串的数量。(60%)n,m<=50,L<=100。(40%)原串长度为1或2,L<=10^18。 【算法】AC自动机+DP+矩阵快速幂 【题解】其实题意的数据范围不太清晰,反正开200个点就足够了。 因为要匹配禁忌串,所以
阅读全文
摘要:【题意】给定01矩阵,求最大全1子矩阵。n,m<=1000。 【算法】动态规划(悬线法) 【题解】★对于01矩阵中的任意一个全1极大子矩阵,都可以在其上边界遇到的障碍点处悬线到下边界的点x,则点x唯一对应了一个极大子矩阵,那么至多有n*m个极大子矩阵,而最大子矩阵一定是极大子矩阵,故求解复杂度O(n
阅读全文
摘要:【题目】D. Animals and Puzzle 【题意】给定n*m的01矩阵,Q次询问某个子矩阵内的最大正方形全1子矩阵边长。n,m<=1000,Q<=10^6。 【算法】动态规划DP+二维ST表 【题解】设f[i][j]为以(i,j)为右下角的最大正方形全1子矩阵。 f[i][j]=min{
阅读全文
摘要:【题目】C. Sonya and Problem Wihtout a Legend 【题意】给定n个数字,每次操作可以对一个数字±1,求最少操作次数使数列递增。n<=10^5。 【算法】动态规划+前缀和优化 【题解】★令b[i]=a[i]-i,则a[i]递增等价于b[i]不递减。 这样做之后,显然数
阅读全文
摘要:【题目】C. Black Widow 【题意】给定一个表达式,形式为(...)^(...)^......^(...)=1(n个括号),括号中为1~2个值取或。有m个变量,给出表达式的值为xi或 !xi,xi只能为0或1,求变量赋值使得表达式成立的方案数。每个变量至多出现两次。n,m<=10^5。 【
阅读全文
摘要:【题意】n个人进行游戏,每轮只保留最大的a[i]倍数的人,最后一轮过后剩余2人,求最小和最大的n,或-1。n<=10^5。 【算法】递推||二分 【题解】令L(i),R(i)表示第i轮过后的最小人数和最大人数。 令X(i)和Y(i)表示区间[L(i),R(i)]中最小的a[i]倍数和最大的a[i]倍
阅读全文
摘要:【题目】B. Ant Man 【题意】给定n个人的xi,ai,bi,ci,di,起点为s,终点为e,移动: In simpler words, jumping from i-th chair to j-th chair takes exactly: |xi - xj| + ci + bj secon
阅读全文
摘要:【题意】给定n台在时间di可以买入的机器,pi买入,可在任意时间ri卖出,买入和卖出之间的持有时间每天产生gi金钱,任意时间至多持有一台机器。给定初始钱数c和总天数T,求最大收益。n<=10^5。 【算法】动态规划+斜率优化(CDQ分治) 【题解】机器按di排序,添加一台时间为T+1的机器,令f[i
阅读全文
摘要:【题意】初始资金s,有两种金券A和B,第i天,买入时将投入的资金购买比例为rate[i]的两种股票,卖出时将持有的一定比例的两种股票卖出,第i天股票价格为A[i],B[i],求最大获利。n<=100000。 【算法】动态规划+斜率优化(CDQ分治) 【题解】为了最大获利,每次交易一定是全部买进和全部
阅读全文
摘要:【题意】给定n个数字ai和L,R,ai=0代表在L~R中任取,求最长上升子序列。n<=10^5,0<=ai<=10^5。 【算法】DP+平衡树(fhq-treap) 【题解】对于LIS,有两种经典O(n^2)的递推式,即 ①f[i]表示以 i 结尾的LIS,f[i]=max(f[k]+1),k<i&
阅读全文
摘要:【题意】给定正边权有向图,车油量上限C,每个点可以花费pi加油至min(C,ci),走一条边油-1,T次询问s点出发带钱q,旅行路程至少为d的最多剩余钱数。 n<=100,m<=1000,C<=10^5,q<=n^2。 【算法】动态规划 【题解】官方题解 虽然不是DAG,但是由于q很小的特点,将q加
阅读全文
摘要:【题意】求从字符串A中取出k个互不重叠的非空子串顺序拼接形成B的方案数。n<=1000,m<=100,k<=m。 【算法】动态规划 【题解】这题主要是将从i-l转移变成从i-1转移,从而省略l这一维的枚举(等价于记录前缀和,将信息顺序传递过来)。 f[i][j][k]表示字符串A到i,字符串B到j,
阅读全文
摘要:【题意】给定只含小写字母的字符串,要求分割成若干段使段内字母重组顺序后能得到回文串,求最少分割段数。n<=2*10^5 【算法】DP 【题解】关键在于快速判断一个字符子串是否合法,容易发现合法仅当不存在或只存在一个奇数字符,其余字符均为偶数。 当涉及到奇偶性(%2)时,很自然能想到异或。 将小写字母
阅读全文