dalao留步,40求助

P1002 [NOIP2002 普及组] 过河卒

这里可能是因为你混淆了能不能走与该点的方案数。 比如这里: ```cpp for(int j=1;j<=m;j++) if(a[i][j]==-1) a[i][j]++; ``` 这里a[i][j]++后是等于0没错,但你大概是想把它当作flag去用,而不是方案数啊。 ```cpp else a[i][j]=a[i][j-1]+a[i-1][j]; cout<<a[n][m]; ``` 这里a又是方案数了。 所以我认为应当开两个数组:long long ans和bool flag。这样更为科学。 贴上我的~~AC~~垃圾代码,希望有所帮助。 ```cpp #include <iostream> using namespace std; bool chess[23][23]; long long ways[23][23]; int main() { ways[0][1]=1;//等效于为第一个点赋初值为1. int n,m,x,y; cin>>n>>m>>x>>y; n++;m++;x++;y++;//move chess[x][y]=chess[x+1][y+2] =chess[x+2][y+1]=chess[x+2][y-1] =chess[x+1][y-2]=chess[x-1][y-2] =chess[x-2][y-1]=chess[x-2][y+1] =chess[x-1][y+2]=1; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { if(chess[i][j]==1) ways[i][j]=0; else ways[i][j]=ways[i][j-1]+ways[i-1][j]; } cout<<ways[n][m]<<endl<<endl; return 0; } ``` ------------ 另,万能头文件重名率较高,建议少用。 有什么不对的地方还请多多指教啦~
by koori_sakura @ 2018-07-08 21:57:35


@[RogerDong](/space/show?uid=52826) 啊啊,不好意思,请无视最后的空行……
by koori_sakura @ 2018-07-08 21:58:26


|