随笔分类 - 动态规划,递推
摘要:枚举子序列的末尾,递推。方案数:f[i = 以i结尾][k =子序列长度] = sum(f[j][k-1]),j using namespace std;typedef long long ll;const int N = 1e5+5, K = 10;ll C[K][N];ll sum(ll C[]...
阅读全文
摘要:dp,答案容易想到是 凑出价格总和≤m-5 + 没被使用的最大价格。dp[i = 前i种价格][j = 价格总和] = 最大没使用的价格下标idx_m。dp[i-1][j]存在的话,则只要更新idx_m。如果dp[i-1][j-c[i]]存在但是dp[i-1][j]不存在,那么c[i]必须使用,id...
阅读全文
摘要:类似一个背包问题的计数问题。(虽然我也不记得这叫什么背包了一开始我想的状态定义是:f[n = 和为n][k 个素数]。递推式呼之欲出: f[n][k] = sigma f[n-pi][k-1]。但是题目还有一个要求是不同素数之和,为了保证素数不同,那就先枚举素数吧,f[i][n][k] =sigma...
阅读全文
摘要:砖块上的数字最终都可以看作是最后一行的线性组合,独立变元最多9个。这类题的一般做法,线性组合都可以列出方程然后高斯消元。对于这道题,只要确定最后一行剩下的4个变量就好了,对于最后一行的j位置,它对上面位置某个数字的和贡献次数等于它到那个位置路径的方案数,可以发现就是杨辉三角。倒数第二行的数已经足够确...
阅读全文
摘要:递推,f[i = i个名次][j = 共有j个人] = 方案数。对于新加入的第j个人,如果并列之前的某个名次,那么i不变,有i个可供并列的名次选择,这部分是f[i][j-1]*i,如果增加了一个名次,那么之前有i-1个名次,i-1个名次之间有i个空,这部分是f[i-1][j-1]*i。/******...
阅读全文
摘要:分析:对于区间[i,j],枚举j。固定j以后,剩下的要比较M_gcd(k,j) = gcd(ak,...,aj)*(j-k+1)的大小, i≤k≤j。此时M_gcd(k,j)可以看成一个二元组(g, k)。根据gcd的性质gcd(a1,a2,...,an) = gcd(a1,gcd(a2,..,an...
阅读全文
摘要:dp[i = 前i中sorter][j = 将min移动到j位置] = 最短的sorter序列。对于sorteri只会更新它右边端点r的位置,因此可以把数组改成一维的,dp[r] = min(dp[r],dp[j]+1), l≤j#include#include#include#include#in...
阅读全文
摘要:矩阵乘法是可以分块的,而且幂的和也是具有线性的。不难得到Si = Si-1+A*Ai-1,Ai = A*Ai-1。然后矩阵快速幂就可以了。/********************************************************** ----------...
阅读全文
摘要:定义ai表示红色和绿色方块中方块数为偶数的颜色有i个,i = 0,1,2。aij表示刷到第j个方块时的方案数,这是一个线性递推关系。可以构造递推矩阵A,用矩阵快速幂求解。 1 /********************************************************* 2 *...
阅读全文
摘要:
背包,滚动数组,数组负下标的处理,贪心
阅读全文

摘要:
LIS的等价表述,单调匹配,O(nlogn)
阅读全文

摘要:
dp的和号优化,10^36范围整数的处理
阅读全文

摘要:
dp和号优化,多种不可区分物品方案统计
阅读全文

摘要:
挑战程序设计竞赛 2.3 动态规划。需要稍加思考
序列dp,贪心,离散,递推min优化,滚动数组。
阅读全文

摘要:
挑战程序设计竞赛 2.3 动态规划。需要稍加思考的题目。
dp转移顺序,定义优化,多重背包判断存在性
阅读全文

摘要:
挑战程序设计竞赛 2.3 动态规划 需要稍加思考的题目。
Dilworth定理,偏序,LIS
阅读全文
