记忆化搜索+杨辉三角
#include <bits/stdc++.h>
using namespace std;
int n,m;
short int a[101],f[101][10001];
const int mod=10007;
int dfs(int c,int d)
{
if(c==d||c==0||d==0) return 1;
if(f[c][d]==0) f[c][d]=(dfs(c-1,d-1)+dfs(c,d-1))%mod;
else return f[c][d];
return f[c][d];
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>a[i];
if(n<a[i]){cout<<"0";return 0;}
}
int ans=1;
for(int i=1;i<=m;i++)
{
ans*=dfs(a[i],n);ans%=mod;
n=max(0,n-a[i]);
}
cout<<ans;
}
是不是还有那个地方没特判?求教