给定正整数 ? (n<=200) ,计算 ? 个元素的集合 {1,2, ⋯ , ?},所有非空子集和的乘积取模 998 244 353
后的结果
1
IN
3
OUT
2160
解释
例如 3 个元素的集合有 7 个非空子集,分别为
{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3}
对子集内元素求和再乘积的结果就是
1 × 2 × 3 × (1 + 2) × (1 + 3) × (2 + 3) × (1 + 2 + 3) = 2160
2
IN
11
OUT
548236960
3
IN
40
OUT
133045141
4
IN
150
OUT
267526432
求助!不知道怎么做!
附我的代码(60pts)
#include<bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
const int mod=998244353;
int n;
unsigned long long sum=1;
vector<int> y;//存储所有子集和
int main(){
// freopen("set.in","r",stdin);
// freopen("set.out","w",stdout);
cin>>n;
y.push_back(1);
for(int i=2;i<=n;i++){
y.push_back(i);
sum*=i;
sum%=mod;
int sz=y.size()-1;
for(int j=0;j<sz;j++){
y.push_back(y[j]+i);
sum*=y[j]+i;
sum%=mod;
}
}
cout<<sum%mod;
return 0;
}