/* 开始暴力+滚动数组70 后来发现不用循环很多 找p的倍数 找%p意义下为0的就好了 */ #include<iostream> #include<cstdio> #include<cstring> #define maxn 3010 #define mod 1000000009 using namespace std; int n,p,a[maxn],f[2][maxn],sum,ans; int main() { scanf("%d%d",&n,&p); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); a[i]%=p; } f[0][0]=1; for(int i=1;i<=n;i++){ for(int j=0;j<=p;j++){ f[i&1][j]=(f[i&1][j]+f[i-1&1][(j-a[i]+p)%p])%mod; f[i&1][j]=(f[i&1][j]+f[i-1&1][j])%mod; } for(int j=0;j<=p;j++) f[i-1&1][j]=0; } printf("%d\n",f[n&1][0]); return 0; }
时间: 2024-10-07 23:55:57