https://winniechen.cn/wp-content/uploads/2018/08/Winniechens_test_1.rar
放水练习赛,主要考察最短路,DP,状态压缩等知识点
题解:
T1 公平
部分分我就不说了,反正题也不难,直接说正解吧。建图,跑K次最短路求出到每个节点这K种物品的最短路。之后,每个点用一个堆,取前S大即可!
Codeforces 986 A Fair
T2 寻宝游戏
这个题是一个非常棒的DP,我们可以这样设:f[i][j][k][l]表示走到j,使用了K次机会,还有l个库存,每次跨行转移的时候,O(n)统计从第i行,j+1到n和第i+1行1到j-1选择多少个交换即可。之后不跨行转移直接转移即可。
总时间复杂度 O(n^3K^2)
lydsy05 T2 BZOJ 5359
T3 分裂
这个题很好啊,比起什么裸的状压DP高多了!
我们可以考虑,什么时候答案最大:全合并,之后再分裂
这样,我们必定可以得到答案,也就是说答案必定小于n+m
那么我们可以考虑,什么时候能够使答案更小:就是n中去一些,m中取一些,它们的和相等的时候,ans-=2;
这样,我们就可以考虑状态f[S][s]表示,在n中取状态S,m中取状态s的最多和相等部分
之后转移可以从f[S-1<<i-1][s]或者f[S][s-1<<i-1]转移,之后判断sum[S]和sum[s]是否相等,相等f[S][s]+=2;
最后答案为n+m-f[(1<<n)-1][(1<<m)-1];
时间复杂度 O(n*2^{n+m})
BZOJ 2064