代码开了 O2 能过,不开只有5分。求大佬帮忙看看。
#include <iostream>
#include <cstring>
using namespace std;
#define MAXN 5005
#define mod 10086001
typedef long long ll;
ll n,k,s[MAXN],f[MAXN],sum,ans,pre[MAXN];
int main() {
scanf("%lld%lld",&n,&k);
for (int i=1;i<=k;i++) {
scanf("%lld",&s[i]);
sum+=s[i];
}
f[0]=1,pre[0]=1;
if (sum<n) {
printf("impossible");
return 0;
}
for (int i=1;i<=k;i++) {
for (int j=1;j<=n;j++) pre[j]=(pre[j-1]+f[j]);
for (ll j=n;j>=1;j--) {
f[j]=(f[j]+pre[j-1]-pre[j-min(s[i],j)-1])%mod;
f[j]%=mod;
}
ans=(ans+f[n])%mod;
}
printf("%lld",ans);
return 0;
}