设f[i][j]为奶牛选取状态为i,最后一头选的为j,转移直接f[k][(1<<(k-1)|i]+=f[j][i]
#include#include #include using namespace std;int n,m,p[20],a[20];long long f[20][1<<16],ans;int main(){ scanf("%d%d",&n,&m); for(int i=1; i<=n; i++) { scanf("%d",&a[i]); p[i]=1<<(i-1); } for(int i=1;i<=n;i++) f[i][p[i]]=1; for(int i=0;i<=(1< m) f[k][p[k]|i]+=f[j][i]; for(int i=1;i<=n;i++) ans+=f[i][(1<