要noip了呀。。。
给自己留个复习的地方好了
一句话题解写一写
给的DP类型,鬼知道会不会有什么骚东西 (划掉
1103 画山
考虑前后两条直线的斜率必须不同,令f[x][y][k]表示当前线段的斜率为k,终点为(x,y)的方案数总和,则有f[x][y][k] = sum(f[x’][y’][k’]),其中(x’,y’)为线段的起点,k’为其他直线的斜率,显然对于枚举起点,要对给定的线段做一个背包,求出线段组合后的可能长度,考虑优化,因为sum(f[x’][y’][k’])为除掉斜率为k的线段以外的方案数,那就可以对f[x][y][k]统计一个和s[x][y],每次更新时只需加上s[x][y]-f[x][y][k],效率o(N4)。
1109 方块消除
考虑对于连续区间的判断,令f[x][y][k]表示删去x到y这个区间时,区间右侧有k个与y区间颜色相同且没有删除的最高分,显然f[x][y][k] = f[x][y-1][0] +(len[y]+k)*(len[y]+k),f[i][j][k] = max(f[i][j][k],f[i][l][len[j]+k]+f[l+1][j-1][0]),len[j]表示j这一块的长度,l∈[i,j)。
1114 HY在福州
考虑概率DP+拓扑序,我们有f[to[i]] += (f[x]+v[i])/deg[t],其中x为当前点,to[i] 为 到达点,v[i]为边权,deg[x] 为x的度数。
1149 工具箱
为什么这题会在DP里啊喂。。。。爆搜完事 (然鹅正解是个神奇状压
1196 围豆豆
数据范围显然状压,考虑如何判断某个点是否在多边形内部,我们可以发现如果由该点向外引一条射线,如果与该多边形的交点为奇数个,那么该点在多边形内部,那么则有f[x][y][s] 表示以(x,y)为起点的某个多边形围住某些点(状态为s)的最短长度,很显然可以通过最短路求得,然后和它围住的点的点权求和,那么就可以得出答案了。
1338 蜘蛛侠
DP?显然暴力啊喂……
1443 奶牛逃亡
将位置排序,f[i][j][k]记为当前已经抓到i~j的奶牛,位于左/右边的最小代价,显然f[i][i][0/1] = abs(a[i])xn,f[i][j][0] = min(f[i+1][j][0]+(a[i+1]-a[i])x(n-j+i),f[i+1][j][1]+(a[j]-a[i])x(n-j+i)),f[i][j][1] = min(f[i][j-1][1]+(a[j]-a[j-1])x(n-j+i),f[i][j-1][0]+(a[j]-a[i])x(n-j+i)),大力分讨完事了。
1552 网络小说分组
树状数组裸题,统计出权值的前缀,排序后树状数组维护最大值即可。
1554 字符串函数
模拟,对于每个小写字母,统计出其在a[i]中的前缀和和后缀和,对于b[i]中的每个字母,它对答案的贡献是i * nxt[i+1][b[i]]+(n-i+1)*pre[i][b[i]],其中nxt为后缀和,pre为前缀和。
1562 摩天大楼
状压套路题,枚举s的子集进行转移,注意电梯什么时候多一次即可。
1597 粉刷匠
对于每块木板,我们求出这块木板刷j次刷到k位置的最大收益g[j][k],那么很显然g[j][k] = max(g[j-1][l]+calc(l+1,k)),其中calc(x,y)表示从x到y这一段区间中染色正确的最大值,然后考虑对于所有背包做一个分组背包,f[i][j]为前i块木板共粉刷j次的最大收益,则有f[i][j] = max(f[i-1][j-k] + g[k][m])。
1601 山贼集团
暑假集训时候的套路题,先把原树转化为一个二叉树,其中包括根节点外的所有叶节点为原树上的点,然后树形状压转移,然鹅由于太菜,这题还没写,式子不会推……