P1896互不侵犯(状压)
dp前先将所有满足条件的状态一一求出来,节省时空间
三维数组f[i][j][k]存第i行状态为k,目前共j个将军
行与行之间状态可以通过左右移匹配来查看是否符合条件
P4187[USACO18JAN]Stamp Painting G
思维线性dp
要用前缀和数组辅助递推
先把所有的颜色排列个数求出来(m^n)
再减去不符合条件的个数
不符合条件的即为没有任何一个连续k个相同颜色的排列
前k-1个数字不受影响
当数组滚动到i时且i>k,至多有j~i这一段k-1个有相同颜色,i不能和j-1相同颜色,所以i只有m-1种可能
所以用前缀和数组pre[i-1]-pre[i-k],(j~i-1)的和乘(m-1)得解
P3205 [HNOI2010]合唱队(区间dp)
常规方式,从小范围到大范围
f[i][j][0]表示从最后一次加左边的可能性,f[i][j][1]表示从最后一次加右边的可能性
f[i][j][0/1]从f[i][j-1][1/0]和f[i+1][j][0/1]变化过来
P1792 [国家集训队]种树
反悔贪心(dp思想)
优先队列处理输入的数
从大到小取,每取一个旁边的数标记不能拿。
在录入(左边点权+右边点权−当前点权)的一个id相同,值不同的新数,防止取两边比取该点更优
再用链表维护
P1043 [NOIP2003 普及组] 数字游戏
常规区间dp,用前缀和维护
f[l][r][m]意思是该区间分为m部分的最大/小值
递推时模拟断点i,l-i为m-1部分,i+1-r为1部分。