考虑本题暴力,易得转移方程
令f[j][i]表示到第j个位置最多分割为i个组所有的方案数
f[j][i]=∑k=jnf[j][i−1],sum[k]−sum[j]≡0(modi)
就可以很快的得到一个O(n3)的代码,实现好的话可以得到32pts
考虑优化,我们可以将式子sum[k]−sum[j]≡0(modi)改写为sum[k]≡sum[j](modi)
所以建立一个桶vis,记录所有同余系的∑f[x][i−1],考虑f[j][i]的转移时就只需要加上vis[sum[j]%i]就可以了
时间复杂度O(n2),可以通过本题
for( int i=2;i<=n;i++ )
{
memset( vis,0,sizeof( vis ) );
for( int j=1;j<=n;j++ )
{
( f[j][i]+=vis[sum[j]%i] )%=mod;
( vis[sum[j]%i]+=f[j][i-1] )%=mod;
}
}