96分代码(WA#1#2):
#include<bits/stdc++.h>
#define mod 1000000007
using namespace std;
int n;
long long a[100005],dp[100005],last[100005];
int main(){
//freopen("jedan.in","r",stdin);
//freopen("jedan.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
if(a[1]>0||a[n]>0 ) {
printf("0");
return 0;
}
last[0]=1;
for(int i=2;i<=n;i++){
for(int j=0;j<=n-1;j++){
if(a[i]==-1||j==a[i]){
dp[j]=(last[j]+last[j+1])%mod;
if(j!=0)dp[j]=(dp[j]+last[j-1])%mod;
} else dp[j]=0;
}
for(int j=0;j<=n-1;j++)last[j]=dp[j];
}
cout<<dp[0];
return 0;
}
我在输出答案时把dp[0]改成last[0]就AC了,不应该呀,我最后把last赋值给dp,这时last=dp了,那输出答案时为甚么dp[0]和last[0]不一样了??