题意没有理解透,结果不知道怎么做,据说是很简单的dp问题
高手的代码——ACCEPT
#include<iostream> //DP #include <cstdio> #include<cstring> using namespace std; char g[40][40]; long long ans[40][40]; //题目要求是64位 int main() { int n; while(cin>>n,n!=-1) { for(int i=1;i<=n;++i) scanf("%s",g[i]+1); memset(ans,0,sizeof(ans)); ans[1][1]=1; for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) { for(int u=1;u<j;++u) if(g[i][u]=='0'+j-u) ans[i][j]+=ans[i][u]; for(int v=1;v<i;++v) if(g[v][j]=='0'+i-v) ans[i][j]+=ans[v][j]; } /*for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cout<<ans[i][j]<<' '; } cout<<endl; }*/ cout<<ans[n][n]<<endl; } return 0; }