可以帮忙看看这两段代码功能上有什么区别吗?为什么第一个可以通过所有样例,但是第二个例3,4会错误吗?
#include<bits/stdc++.h>
using namespace std;
//动态规划 递推式与终止条件
//f[x,y]=f[x-1,y]+f[x,y-1]
//f[0,0]=1,f[0,y]=1,f[x,0]=1,f[马]=0
int main(){
int x,y;//终点
int n,m;//马的位置
cin>>x>>y;
cin>>n>>m;
vector< vector<long long>> a(x+1,vector<long long> (y+1,0));
for(int i=0;i<=x;i++){//注意计算顺序
for(int j=0;j<=y;j++){//处于马点时为0
if((max(abs(j-m),abs(i-n)))==2&&(abs(i-n)+abs(j-m)==3)||(i==n&&j==m)){
//cout<<"*"<<" ";
continue;
}
else if(i==0&&j==0){//不能将所有边界的都设为1,可能存在边界有点走不到,导致后面的全部不可能走到
a[i][j]=1;
}else {
## _改动位置_ **if(i) //不是第一行
a[i][j]+=a[i-1][j];
if(j)//不是第一列
a[i][j]+=a[i][j-1];**
}
//cout<<a[i][j]<<" ";
}
//cout<<endl;
}
if(x==0&&y==0){
cout<<0<<endl;
return 0;
}
cout<<a[x][y]<<endl;
return 0;
}
第二个代码:
#include<bits/stdc++.h>
using namespace std;
//动态规划 递推式与终止条件
//f[x,y]=f[x-1,y]+f[x,y-1]
//f[0,0]=1,f[0,y]=1,f[x,0]=1,f[马]=0
int main(){
int x,y;//终点
int n,m;//马的位置
cin>>x>>y;
cin>>n>>m;
vector< vector<long long>> a(x+1,vector<long long> (y+1,0));
for(int i=0;i<=x;i++){//注意计算顺序
for(int j=0;j<=y;j++){//处于马点时为0
if((max(abs(j-m),abs(i-n)))==2&&(abs(i-n)+abs(j-m)==3)||(i==n&&j==m)){
continue;
}
else if(i==0&&j==0){//不能将所有边界的都设为1,可能存在边界有点走不到,导致后面的全部不可能走到
a[i][j]=1;
}else {
_改动位置_ **int p=0,q=0;
if(i-1>=0) //不是第一行
p=a[i-1][j];
if(j-1>=0)//不是第一列
q=a[i][j-1];
a[i][j]=p+q;**
}
//cout<<a[i][j]<<" ";
}
//cout<<endl;
}
if(x==0&&y==0){
cout<<0<<endl;
return 0;
}
cout<<a[x][y]<<endl;
return 0;
}
谢谢!