T1.词编码(word)
给出一些原长为n的01串经过变化后的串求原串。原串的特点是:各个1的位置号和%(n+1)==0
变法(只取其一):
- 改一个0为1
- 删一个
- 加一个
- 不变。
其中2优先考虑位置靠左的,然后优先考虑0
分类讨论加模拟,但是需要优化。现求出sum[i]为i以后的1的个数,ans[i]为i以后的位置和,这样一个后缀和(姑且这么叫)的优化就可以过了。
T2.笨笨粉刷匠(draw)
给出n块m个单位长的木板和t次粉刷,有0,1两种颜色。给出每个单位的正确颜色,且每个单位只能被刷一次。求最多刷对几块。
明显的dp。考虑到每个单位只能刷一次,而且数据范围限制,不能考虑一般的区间dp。先对每块木板处理,f[i][j]表示前i个单位分为j块的最优解,best[i][j]表示i到j之间0的个数和1的个数的较大值。
f[i][j]=max(f[i-1][j],f[k][j-1]+best[k+1][i])
然后就可以处理n块木板了。g[i][j]表示前i块木板刷j次的最大值。
g[i][j]=max(g[i-1][k]+f[i][m][i-k])
输出g[n][t].
T3.笨笨的电话网络(phone)
N个点,p条边,求最短路(而且代价为最大边的权值)(但是其中k条权值可视为0)。
首先肯定有一个最短路模型,但是就最短路肯定处理不了。。。
然后可以二分答案mid,把所有权值<=mid的边全都取来,然后spfa,然后做1到N的最短路(把已经选的边权值看做0,其他看做1),如果<=k表示可行。
然后输出就好了。