0
已解决
陈曦
资深天翼
资深天翼
#include<iostream>
using namespace std;
long long m,n,x,y,f[30][30];
long long dir[9][2]={{0},{-1,-2},{-2,-1},{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2}};
bool vis[30][30];
int main(){
cin>>n>>m>>x>>y;
for(long long i=1;i<=m;i++){
vis[i][y]=1;
}
for(long long j=1;j<=n;j++){
vis[x][j]=1;
}
// for(int i=1;i<=m;i++){
// for(int j=1;j<=n;j++){
// cout<<vis[i][j]<<' ';
// }
// cout<<endl;
// }
if(vis[0][0]) f[0][0]=0;
else f[0][0]=1;
for(long long i=0;i<=n;i++){
for(long long j=0;j<=m;j++){
if(vis[i][j]) continue;
for(int ii=1;ii<=9;ii++){
for(int jj=1;jj<=2;jj++){
f[i][j]+=dir[ii][jj];
}
}
}
}
cout<<f[n][m];
return 0;
}
只输出1。
发什么都行
0
已采纳
荣光峰
资深光能
资深光能
写的复杂了亿点点
荣光峰在2021-08-22 12:14:34追加了内容
边界:f[0][0]=1
荣光峰在2021-08-22 12:14:39追加了内容
边界:f[0][0]=1
荣光峰在2021-08-22 12:14:44追加了内容
边界:f[0][0]=1
荣光峰在2021-08-22 12:14:49追加了内容
边界:f[0][0]=1
荣光峰在2021-08-22 12:14:56追加了内容
边界:f[0][0]=1
荣光峰在2021-08-22 12:15:00追加了内容
边界:f[0][0]=1
荣光峰在2021-08-22 12:15:23追加了内容
网卡了,sorry
0
刘乐宸
新手天翼
新手天翼
简单地递推
f[0][0]=1;
for(int i=0; i<=n;i++) {
for(int j=0;j<=m;j++) {
if(i==x || j==y) continue;
if(i-2>=0&&j-1>=0)f[i][j]+=f[i-2][j-1];
if(i-1>=0&&j-2>=0) f[i][j]+=f[i-1][j-2];
}
}
----------------------------分割线--------------------------------------------
或者写复杂点
for(int i=0;i<9;i++) {
int nx=x+dir[i][0],ny=y+dir[i][1];
if(nx>=0&&nx<=n&&ny>=0&&ny<=m)
b[nx][ny]=true;
}
for(int i=0;i<=n;i++) {
for(int j=0;j<=m;j++) {
if(i==0 && j==0 || b[i][j]) continue;
if(i!=0) f[i][j]+=f[i-1][j];
if(j!=0) f[i][j]+=f[i][j-1];
}
}
————————分割线————————————
总之,最后输出的都是f[n][m]