随笔分类 - 动态规划 DP
摘要:https://www.lydsy.com/JudgeOnline/problem.php?id=3173 插入的数是以递增的顺序插入的 这说明如果倒过来考虑,那么从最后一个插入的开始删除,不会对以某个数结尾的最长上升子序列产生影响 所以 先原序列求出来,输出即可 还原原序列的方法: 可以用平衡树,
阅读全文
摘要:http://www.lydsy.com/JudgeOnline/problem.php?id=2244 每枚导弹成功拦截的概率 = 包含它的最长上升子序列个数/最长上升子序列总个数 pre_len [i] 表示以i结尾的最长不下降子序列的长度 pre_sum[i] 表示对应长度下的方案数 suf_
阅读全文
摘要:http://www.lydsy.com/JudgeOnline/problem.php?id=4870 80分暴力打的好爽 \(^o^)/~ 预处理杨辉三角 令m=n*k 要求满足m&x==x ,x<=m, x%k==r 的x的个数 结论:若n&m==m,则C(n,m)为奇数,否则为偶数 枚举m的
阅读全文
摘要:http://www.lydsy.com/JudgeOnline/problem.php?id=3294 如果一个颜色的棋子放在了第i行第j列,那这种颜色就会占据第i行第j列,其他颜色不能往这儿放 设第k种颜色的棋子有a[k]个 令g[k][i][j] 表示第k种颜色的棋子,恰好占据i行j列的方案数
阅读全文
摘要:http://www.lydsy.com/JudgeOnline/problem.php?id=3672 法一:线段树维护可持久化单调队列维护凸包 斜率优化DP 设dp[i] 表示i号点到根节点的最少花费 dis[i] 表示 点i到根节点的距离 dp[i]= min { (dis[i]-dis[j]
阅读全文
摘要:http://uoj.ac/problem/300 预备知识: C(n,m)是奇数的充要条件是 n&m==m 由卢卡斯定理可以推出 选出的任意相邻两个数a,b 的组合数计算C(a,b)必须是奇数 所以可以设dp[i][j] 表示前i个数里面,选的最后一个数是第j个数的方案数 转移的时候,枚举前i-1
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=5956 转移方程:dp[i]=(dis[i]-dis[j])*(dis[i]-dis[j])+P+dp[j] 斜率优化,可持久化单调队列维护 #include<cstdio> #include<cstring> #
阅读全文
摘要:https://www.luogu.org/problemnew/show/P3994 设dp[i] 表示第i个城市到根节点的最小花费 dp[i]=min{ (dis[i]-dis[j])*P[i]+Q[i]+dp[j] } 这是O(n^2)的 这个式子可以斜率优化 dp[i]+dis[j]*P[i
阅读全文
摘要:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1684 题意: 新建一个位运算,求所有子集通过这个位运算后的答案的平方和是多少。 先想弱化版: 新建一个位运算,求所有子集通过这个位运算后的答案的和是多少。 枚举每一个二进制
阅读全文
摘要:http://www.lydsy.com/JudgeOnline/problem.php?id=4069 a!=1: 从高位到低位一位一位的算 记录下哪些位必须为0 dp[i][j] 表示前i个数分为j组,这一位为0,且满足之前必须为0的位也是0 是否可行 枚举k,表示k+1~i分为一组 若k+1~
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=3022 题意: 最多不超过10000组数据,每组数据给定两个数n,m,求一个最小的数,使得该数每一位之和等于n,每一位的平方和等于m。 若无解或者答案超过100位,输出no solution。 n最大=900,m最
阅读全文
摘要:http://acm.zcmu.edu.cn/JudgeOnline/problem.php?id=1894 题意: 有M个鹰蛋,N层楼,鹰蛋的硬度是E,也就是说在1~E层楼扔下去不会碎,E+1层楼扔下去会碎。 给定M,N,问最坏情况下至少几次能得到E的具体的值。(E可能为0) ①n<=100。 ②
阅读全文
摘要:http://www.lydsy.com/JudgeOnline/problem.php?id=1492 dp[i] 表示 第i天卖完的最大收益 朴素的dp: 枚举从哪一天买来的在第i天卖掉,或者是不操作 dp[i]=max(dp[i-1],X[j]*A[i]+Y[j]*B[i]) 其中X[j]表示
阅读全文
摘要:http://www.lydsy.com/JudgeOnline/problem.php?id=3802 dp[i][0/1/2/3] 表示前i个字母,第1、2个字符串,第2、3个字符串的关系分别为 < < , = < , < = , = = 枚举前i-1个字母 构成的关系 再枚举3个字符串的字母
阅读全文
摘要:题意: 有一张纸,被划分成了n*m的格子,每个格子是黑色或者是白色的,每次可以选择一条竖的或者横的不跨越格子的线,然后将纸对折。对折时要保证两面对应的格子颜色相同,且不能将大的一面覆盖到小的上面。求若干次操作后不同的结局。结局不同当且仅当剩下的纸在原矩阵中位置不同。 n,m<=250 dp[u][d
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=5181 题意: 有一个栈,其中有n个数1~n按顺序依次进入栈顶,在某个时刻弹出。 其中m个限制,形如数字A必须在数字B之前弹出。 求方案总数 dp[i][j]表示数字i~j的出栈方案数 枚举最后一个出栈的数k,若k
阅读全文
摘要:http://codeforces.com/contest/314/problem/E 题意: 原本有一个合法的括号序列 擦去了所有的右括号和部分左括号 问有多少种填括号的方式使他仍然是合法的括号序列 括号有25种,序列长度<=1e5 传统的做法: 令dp[i][j]表示当前到第i个字符,现在还有j
阅读全文
摘要:期望得分:40+80+30=150 实际得分:80+70+0=150 T1 LYK loves string(string) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK喜欢字符串,它认为一个长度为n的字符串一定会有n*(n+1)/2个子串,但是这些子串
阅读全文
摘要:http://www.lydsy.com/JudgeOnline/problem.php?id=1047 先用单调队列求出每横着n个最大值 再在里面用单调队列求出每竖着n个的最大值 这样一个位置就代表了一个n*n矩阵的最大值 同理求出最小值 #include<cstdio> #include<ios
阅读全文
摘要:http://www.lydsy.com/JudgeOnline/problem.php?id=3174 按a+b从小到大排序,a+b小的在上面,先考虑让它逃出去 正确性不会证 感性理解一下,最后一个可以达到的最高高度为a+b,显然它越大越能逃出去 f[i][j] 表示前i个逃出去j个后,剩余的最大
阅读全文