摘要: 整数划分问题:900. 整数划分 注意划分出的数可以取$0$。 const int N=1010; int f[N][N]; int n,m; int main() { int T; cin>>T; while(T--) { memset(f,0,sizeof f); cin>>m>>n; f[0] 阅读全文
posted @ 2021-04-11 10:58 Dazzling! 阅读(52) 评论(0) 推荐(0) 编辑
摘要: 将正整数 \(n\) 表示成一系列正整数之和,\(n=n_1+n_2+…+n_k\),其中 \(n_1 \geq n_2 \geq …\geq n_k \geq 1,\ k \geq 1\)。正整数 \(n\) 的这种表示称为正整数 \(n\) 的划分。正整数 \(n\) 的不同的划分个数正整数$n 阅读全文
posted @ 2021-04-11 10:03 Dazzling! 阅读(94) 评论(0) 推荐(0) 编辑
摘要: 最大子段和的树上扩展。 状态表示: \(f[u]\):在以$u$为根的子树中包含u的所有连通块中的权值的最大值。 状态转移: 如果子树中存在权值和为正的连通块,则包含上该子树,否则丢弃。 \[ f[u]=w[u]+\max(f[s_1],0)+\max(f[s_2],0)+\cdots+\max(f 阅读全文
posted @ 2021-04-11 09:37 Dazzling! 阅读(65) 评论(0) 推荐(0) 编辑
摘要: 要求最少添加几个字符,我们可以先从原串中找到一个最长回文子序列,然后对于原串中不属于这个回文子序列的字符,在它关于回文子序列中心的对称位置添加一个相同字符即可。那么需要添加的字符数量即为n-最长回文串长度。 const int N=1010; int f[N][N]; char s[N]; int 阅读全文
posted @ 2021-04-11 08:52 Dazzling! 阅读(79) 评论(0) 推荐(0) 编辑
摘要: 01背包裸题。 状态表示: $f(i,j)$从前$i$个数中选,总和模$K$的余数为$j$的情况下的和的最大值。 状态转移: \[ f(i,j) = f(i-1,j),f(i-1,(j-w[i])\mod k)+w[i] \] const int N=110; int f[N][N]; int w[ 阅读全文
posted @ 2021-04-11 08:39 Dazzling! 阅读(30) 评论(0) 推荐(0) 编辑