社区讨论

【玄】5~10 关

学术版参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lzh6f8ly
此快照首次捕获于
2024/08/05 23:59
2 年前
此快照最后确认于
2024/08/06 09:32
2 年前
查看原帖
https://www.luogu.com.cn/discuss/880792 中指出了问题。我一怒之下直接按题解写了:
CPP
#include <bits/stdc++.h>
#define rep(i,l,r) for(int i=l;i<=r;i++)

using namespace std;

typedef long long ll;
typedef double db;

const ll mod=998244353;
const int N=114;
ll dp[N][N][N];

int n;
ll a[N];

int main()
{
#ifndef ONLINE_JUDGE
    freopen("in.in","r",stdin);
    freopen("out.out","w",stdout);
#endif
    cin>>n;
    rep(i,1,n) cin>>a[i];
    ll ans=0;
    rep(i,1,n)
    {
        memset(dp,0,sizeof(dp));
        dp[1][0][0]=1;
        rep(j,1,n)
            rep(k,0,i)
                rep(r,0,i-1){
                    dp[j+1][k][r]+=dp[j][k][r];
                    if(k<i) dp[j+1][k+1][(r+a[j])%i]+=dp[j][k][r],
                    dp[j+1][k+1][(r+a[j])%i]%=mod;
                    dp[j+1][k][r]%=mod;
                }
        ans+=dp[n+1][i][0];ans%=mod;
    }
    cout<<ans;
}

// 写废的
// #include <bits/stdc++.h>
// #define rep(i,l,r) for(int i=l;i<=r;i++)

// using namespace std;

// typedef long long ll;
// typedef double db;

// const int N=114;
// const ll mod=998244353;

// int n;
// ll a[N],mem[N][N][N];

// ll dp(int i,int j,int r,int p)
// {
//     ll& ans=mem[i][j][r];
//     if(ans!=-1) return ans;
//     if(j==p) return 1;
//     if(j>p) return 0;
//     if(i==n+1) return 0;
//     ll ans0,ans1;
//     ans0=dp(i+1,j,r,p)%mod;
//     ans1=dp(i+1,j+1,(r+a[i])%p,p)%mod;
//     return ans0+ans1;
// }

// int main()
// {
// #ifndef ONLINE_JUDGE
//     freopen("in.in","r",stdin);
//     freopen("out.out","w",stdout);
// #endif
//     cin>>n;
//     rep(i,1,n) cin>>a[i];
//     ll ans=0;
//     rep(i,1,n)
//     {
//         rep(i1,1,n) rep(i2,1,n) rep(i3,1,n) mem[i1][i2][i3]=-1;
//         ans=ans+dp(1,0,0,i);ans%=mod;
//     }
//     cout<<ans;
// }
问题:注释的代码为什么不行?!

回复

1 条回复,欢迎继续交流。

正在加载回复...