不知道为啥95分
#include<bits/stdc++.h>
using namespace std;
int n,a[1005][1005];
int c[1005],c2[1005],c3[1005];
string add(string a,string b)
{
memset(c,0,sizeof(c));
memset(c2,0,sizeof(c2));
memset(c3,0,sizeof(c3));
for(int i=a.size();i>=1;i--) c[a.size()-i+1]=int(a[i-1]-'0');
for(int i=b.size();i>=1;i--) c2[b.size()-i+1]=int(b[i-1]-'0');
int jw=0,dw=0;
for(int i=1;i<=max(a.size(),b.size());i++)
{
dw=c[i]+c2[i]+jw;
jw=dw/10;
dw%=10;
c3[i]=dw;
}
string ans="";
if(jw!=0) ans="1";
for(int i=max(a.size(),b.size());i>=1;i--) ans+=char(c3[i]+'0');
return ans;
}
string dp[1005][1005];
int main(){
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++) cin>>a[i][j];
}
dp[1][1]="1";
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(a[i][j]==0) continue;
if(j+a[i][j]<=n) dp[i][j+a[i][j]]=add(dp[i][j+a[i][j]],dp[i][j]);
if(i+a[i][j]<=n) dp[i+a[i][j]][j]=add(dp[i+a[i][j]][j],dp[i][j]);
}
}
cout<<dp[n][n];
return 0;
}