题解
设 \(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;
}
标签:Frisbee,Cow,P2946,sum,元素,USACO09MAR,int
From: https://www.cnblogs.com/pure4knowledge/p/18050938