P2946 [USACO09MAR] Cow Frisbee Team S

原题链接

题解

\(sum\) 为总能力
则若 \(sum\)\(F\) 的倍数 \(\to\) \(sum\ mod\ F=0\)

根据加法求模的特性,我们可以设 \(dp[i][j]\) 为 加上第 \(i\) 个元素后, 模为 \(j\) 的方案数
转移方程移得
注意一个细节:按照遍历顺序,每个元素要么不是一套方案的第一个元素,要么是
所以先累加所有作为非首元素的方案数,再加上作为首元素的方案数

code

#include<bits/stdc++.h>
using namespace std;
const int mod=1e8;
int dp[2005][1005]={0};
int main()
{
    int n,k;
    cin>>n>>k;
    for(int i=1;i<=n;i++)
    {
        int x;
        cin>>x;
        x%=k;
        for(int j=0;j<k;j++) dp[i][j]=(dp[i][j]+dp[i-1][j]+dp[i-1][(j+k-x)%k])%mod;
        dp[i][x]++;
    }

    cout<<dp[n][0]<<endl;
    return 0;
}

posted @ 2024-03-03 22:55  纯粹的  阅读(64)  评论(0)    收藏  举报