![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dp
Wolf_Reiser
这个作者很懒,什么都没留下…
展开
-
BZOJ3612 [Heoi2014]平衡 递推 整数划分
#include#define LL long long#define clr(x,i) memset(x,i,sizeof(x))using namespace std;const int N=10005,KK=12;int n,K,p,f[N*KK][KK],ans;void solve(){ scanf("%d%d%d",&n,&K,&p); f[0][0]=1; for原创 2017-11-16 21:24:16 · 359 阅读 · 0 评论 -
BZOJ4027 [HEOI2015]兔子与樱花 树形dp+贪心
删掉一个结点的代价是c[i]+son[i]树形dp+贪心,每个结点显然选代价最小的儿子每个结点把儿子排序一下复杂度nlogn,虽然n一开始想到了 但是没敢写。。看了题解发现nlogn能过...#include#define LL long long#define clr(x,i) memset(x,i,sizeof(x))using namespace std;原创 2017-11-19 12:43:47 · 354 阅读 · 0 评论 -
BZOJ1087 [SCOI2005]互不侵犯King 状压dp
给定一个n*n的网格,问恰好摆放K个国王的方案数。n,m显然状压dp.因为国王最多只能向下影响1行.预处理出每个状态为i的棋子数cnt[i],当前状态是否合法c0[i],前一行状态为j时两个状态能否转移的c[i][j].所以设 f[i][j][k]表示摆到第i行,已经摆了j个棋子,当前行的状态为k的方案数.则f[i][j][k]=Σf[i-1][j-cnt[k]][l].(原创 2017-11-25 13:13:58 · 357 阅读 · 0 评论 -
BZOJ2005 [Noi2010]能量采集 递推+容斥/欧拉函数
对题目手动简单分析后,可知要求这里考虑容斥.设f(x)表示最大公约数是x的数对个数,g(x)表示存在公约数x的数对个数.易得g(x)=(n/x)*(m/x).那么f(x)=g(x)-Σ(2*x从后往前递推即可.#include#define LL long long#define clr(x,i) memset(x,i,sizeof(原创 2017-11-21 22:33:59 · 311 阅读 · 0 评论 -
bzoj1090: [SCOI2003]字符串折叠 区间dp+hash
题目大意:一个重复k次的子串x可以折叠替换成k(x)的形式,问原串经折叠后的最短长度.n≤100n\leq100. k(x)的长度为 k的位数+x的长度+2. 区间dp,转移方程为f[i][j]=min(j−i+1,f[i][k]+f[k+1][j])f[i][j]=min(j-i+1,f[i][k]+f[k+1][j]) 如果i~j的子串可以由i~i+k-1的子串重复得来 就要再转移f[i原创 2017-12-31 13:27:00 · 274 阅读 · 0 评论 -
BZOJ1566 [NOI2009]管道取珠 dp
有两个栈,每个栈从底向上有一些颜色为A或B的球,现将这些球全部取出,假设能得到kk个不同的颜色序列,得到每个序列的方案数为aia_i. 求∑ki=1a2i\sum_{i=1}^ka_i^2. 这里需要巧妙转化 a2ia_i^2可以看做两个人每人取一次,取得的序列相同的方案数。 那么设f[i][j][k]f[i][j][k]为第一个人在上面取ii个,下面取jj个,第二个人在上面取kk个,下面取原创 2018-01-03 21:11:11 · 524 阅读 · 0 评论 -
BZOJ3687 简单题 dp+bitset
给出n个数,求所有子集和的异或和。n正常情况下就是一个01背包,但是范围过大会TLE于是用bitset优化一下这个bool dpbitset的第i位表示和为i出现次数的奇偶性这个东西可以像位运算一样操作,比较方便但是好像用的不多。。#include#define LL long long#define clr(x,i) memset(x,i,sizeof(x))using原创 2018-01-09 22:52:44 · 335 阅读 · 0 评论 -
ARC058F 文字列大好きいろはちゃん / Iroha Loves Strings dp+贪心
给出NNN个字符串,要求选出其中一些串按顺序拼接成一个长度为KKK的串,并且要求拼接串的字典序最小。N≤2000,K≤10000,N≤2000,K≤10000,N\leq2000,K\leq10000, 每个串长度不超过KKK,总长度不超过10610610^6. 设ok[i][j]ok[i][j]ok[i][j]表示最后iii个串,能否组成长度为jjj的字符串. 背包转移即可,可以用bitse...原创 2018-06-04 11:41:23 · 1166 阅读 · 0 评论