题目链接:
状压\(DP\)。
设\(f_{i,j}\)表示前\(i\)个人,完成任务的状态为\(j\)时的最大成功率。
暴力转移即可(\(O(n4^n)\))
优化:预处理每个\(i\)对应的合法状态\(j\),\(vector\)存起来,时间复杂度\(O(n2^n)\)
代码:
#include#include int n,Bit[1<<20];double a[25][25],f[2][1<<20];std::vector Rec[25];inline void CMax(double &a,const double &b){a >1]+(i&1);//i二进制下1的个数 for(int i=1;i<=All;++i)Rec[Bit[i]].push_back(i); for(int i=1;i<=n;++i) for(int j=0;j >k&1)CMax(f[i&1][Nowr],f[(i&1)^1][Nowr^(1<