#include<bits/stdc++.h>
using namespace std;
const int mod = 998244353;
long long f[110][110][110];
int main()
{
	int n;
	cin >>n;
	vector<int> a(n + 1);
	for(int i = 0; i < n; i++)
		cin >>a[i];
	
	long long ans = 0;
	for(int k = 1; k <= n; k ++) {
		memset(f, 0, sizeof f);
		f[0][0][0] = 1;
		for(int i = 0; i < n; i++)
		{
			for(int j = 0; j <= k; j++)
			{
				for(int l = 0; l < k; l ++)
				{
					if(f[i][j][l] == 0) continue;
					//不选
					f[i + 1][j][l] = (f[i +1][j][l] + f[i][j][l]) % mod;
					
					if(j < k)
					{
						int new_l = (l + a[i]) % k;
						f[i+1][j+1][new_l] = (f[i+1][j+1][new_l] + f[i][j][l]) % mod;
					
					} 
				}
			}
			
		}
		ans = (ans + f[n][k][0]) % mod;
	}
	cout << ans; 
	return 0;
}
/*
f[i][j][k]:表示从前i个数字中选择j个,且对j取余是k的方案数
最终答案:f[n][i][0] 求和

状态计算:
第一层循环: 本次一共选择多少个数 k 
第二层循环:从前i个数中选   i
第三层循环:枚举 取 0~k个数   j 
第四层循环:枚举余数l: 0~k-1   l 

不选:f[i+1][j][l] += f[i][j][l];
选: j < k 
new_l = (l + a[i]) % k
f[i+1][j+1][new_l] += f[i][j][l]  
 
*/

0 条评论

目前还没有评论...