求助,30分
查看原帖
求助,30分
361968
ML_Ravenclaw楼主2022/12/13 22:03

不知道哪里出错了QAQ

#include <bits/stdc++.h>
using namespace std;
int n,m,a[12];
long long b[12][110][1<<10];
vector<int>c,d[1<<10];
int shuliang(int e)
{
    int f = 0;
    for(int i = 0;i<n;i++)f+=e>>i&1;
    return f;
}
bool check(int i)
{
    return !(i&i>>1);
}
int main()
{
    cin>>n>>m;
    for(int i = 0;i<1<<n;i++)
    {
        if(check(i))
        {
            c.push_back(i);
            a[i]=shuliang(i);
        }
    }
    for(int i = 0;i<c.size();i++)
    {
        for(int j = 0;j<c.size();j++)
        {
            int e = c[i],f=c[j];
            if(!(e&f)&&check(e|f))
            {
                d[e].push_back(f);
            }
        }
    }
    b[0][0][0]=1;
    for(int i = 1;i<=n+1;i++)
    {
        for(int j = 0;j<=m;j++)
        {
            for(auto k:c)
            {
                for(auto l:d[k])
                {
                    if(j>=a[k])
                    {
                        b[i][j][k]+=b[i-1][j-a[k]][l];
                    }
                }
            }
        }
    }
    cout<<b[n+1][m][0];
    return 0;
}
2022/12/13 22:03
加载中...