2 条题解
-
1邓梓昊 LV 7 @ 2024-12-17 13:33:52
#include <iostream> #define int long long using namespace std; const short dir[8][2] = { {1 , 2} , {1 , -2} , {2 , 1} , {2 , -1} , {-1 , 2} , {-1 , -2} , {-2 , 1} , {-2 , -1} }; bool d[30][30]; int dp[30][30] , n , m , x , y; signed main(){ cin >> n >> m >> x >> y; d[x][y] = 1; for(int i = 0 ; i < 8 ; i++){ int tx = x + dir[i][0],ty = y + dir[i][1]; if(tx >= 0 && tx <= n && ty >= 0 && ty <= m) d[tx][ty] = 1; } dp[0][0] = 1; for(int i = 0 ; i <= n ; i++) for(int j = 0;j <= m;j++) if(!d[i][j]){ if(i) dp[i][j] += dp[i-1][j]; if(j) dp[i][j] += dp[i][j-1]; } cout << dp[n][m] << endl; return 0; }
-
-12023-4-4 22:31:54@
一道比较入门的dp题. 答案可能很大,所以记得开
long long
.#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; const int fx[9] = {0, -2, -1, 1, 2, 2, 1, -1, -2}; const int fy[9] = {0, 1, 2, 2, 1, -1, -2, -2, -1}; int bx, by, mx, my; long long f[40][40]; bool s[40][40]; int main() { scanf("%d%d%d%d",&bx,&by,&mx,&my); bx=bx+2; by=by+2; mx=mx+2; my=my+2; f[2][1]=1; s[mx][my]=1; for(int i=1;i<=8;i=i+1)s[mx+fx[i]][my+fy[i]]=1; for(int i=2;i<=bx;i=i+1) { for(int j=2;j<=by;j=j+1) { if(s[i][j]) continue; f[i][j]=f[i-1][j]+f[i][j-1]; } } printf("%lld\n", f[bx][by]); return 0; }
- 1
信息
- ID
- 659
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 2
- 标签
- 递交数
- 77
- 已通过
- 49
- 上传者