求敲晕
查看原帖
求敲晕
892084
xinxin2022楼主2025/7/23 11:54

DP过不了样例。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int mod=998244353;
const int N=(1<<8)+5;
int op,t,n,a[N];
ll f[N][N][N],ans;
int main(){
    cin>>op>>t;
    while(t--){
        ans=0;
        cin>>n;
        memset(f,0,sizeof(f));
        for(int i=0;i<(1<<n);i++) cin>>a[i];
        f[0][(1<<n)-1][0]=f[0][0][(1<<n)-1]=a[0];
        f[0][(1<<n)-1][(1<<n)-1]=1;
        for(int i=0;i<(1<<n);i++){
            for(int j=0;j<(1<<n);j++){
                for(int k=0;k<(1<<n);k++){
                    (f[i+1][j&(i+1)][k]+=(f[i][j][k]*a[i]))%=mod;
                    (f[i+1][j][k&(i+1)]+=(f[i][j][k]*a[i]))%=mod;
                    (f[i+1][j][k]+=f[i][j][k])%=mod;
                    //cout<<f[i][j][k]<<' ';
                }
                //cout<<'\n';
            }
            //cout<<'\n';
        }
        for(int i=0;i<(1<<n);i++)
            (ans+=f[(1<<n)-1][i][i])%=mod;
        cout<<ans<<'\n';
    }
    return 0;
}
2025/7/23 11:54
加载中...