题解:AT_abc262_d [ABC262D] I Hate Non-integer Number
4041nofoundGeoge · · 题解
题目简述
给你一个序列,请你取出任意连续元素,组成一个新的序列的平均数为整数的方法数有多少种?
思路
我们知道序列求平均数的方法为
这不就是一道动态规划的题目吗?
于是我们设
接着我们设计动态转移方程,当不选这个数,方程为:
当我们选这个数:
最后记得模
代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
int a[105];
int dp[105][105][105];
const int mod=998244353;
signed main() {
int N;
cin>>N;
for(int i=0;i<N;i++)cin>>a[i];
int ans = 0;
for(int i=1;i<=N;i++){
dp[0][0][0] = 1;
for(int j=0;j<N;j++){
for(int k=0;k<=i;k++){
for(int l=0;l<i;l++){
dp[j+1][k][l] += dp[j][k][l]%mod;
if(k!=i)dp[j+1][k+1][(l+a[j])%i] += dp[j][k][l]%mod;
}
}
}
ans += dp[N][i][0]%mod;
}
cout<<ans%mod<<endl;
return 0;
}