求加强数据
查看原帖
求加强数据
601130
MYiFR楼主2024/7/9 11:43
#include<bits/stdc++.h>
#define ll long long
#define db double
#define ull unsigned ll
#define ldb long db 
#define pii pair<int,int>
#define pil pair<int,ll>
#define pli pair<ll,int>
#define pll pair<ll,ll>
#define pdd pair<db,db>
#define F first
#define S second
#define pb push_back
using namespace std;
int n,k;
ll f[15][15][525],ans;
void trans(int lst,int msk,int I,ll x){
    for(int T=0;T<(1<<n);++T) if(__builtin_popcount(T)<=lst && !(T&msk)){
        bool flag=0;
        for(int i=1;i<n;++i) if((T>>i&1) && (T>>(i-1)&1)){
            flag=1;
            break;
        }
        if(!flag) f[I][lst-__builtin_popcount(T)][(T|(T<<1)|(T>>1))&((1<<n)-1)]+=x;
    }
}
int main(){
    scanf("%d%d",&n,&k);
    f[0][k][0]=1;
    for(int i=0;i<n;++i) for(int j=0;j<=k;++j) for(int msk=0;msk<(1<<n);++msk) if(f[i][j][msk]) trans(j,msk,i+1,f[i][j][msk]);
    for(int msk=0;msk<(1<<n);++msk) ans+=f[n][0][msk];
    printf("%lld",ans);
    return 0;
}

数据范围中,K≤N×NK\leq N\times N,最大为 8181,但我的代码对应维只开了 1515。

这是 LOJ 上的数据,事实证明这份代码确实是有问题的。

但是你谷评测结果是 AC。

把 KK 提一提就好了。

2024/7/9 11:43
加载中...