Winniechen’s test1

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

posted @ 2018-08-23 19:40  Winniechen  阅读(214)  评论(0编辑  收藏  举报