关于滚动数组的玄学问题
查看原帖
关于滚动数组的玄学问题
490978
小超手123楼主2022/8/1 13:02

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]不一样了??

2022/8/1 13:02
加载中...