hdu 1208 记忆化搜索
题目大意:只能按照格子上的数字*方向走,从左上走到右下
Sample Input
4
2331
1213
1231
3110
Sample Output
3
直接记忆化搜索,注意是0的情况
1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<queue> 7 #include<map> 8 using namespace std; 9 #define MOD 1000000007 10 const int INF=0x3f3f3f3f; 11 const double eps=1e-5; 12 #define cl(a) memset(a,0,sizeof(a)) 13 #define ts printf("*****\n"); 14 const int MAXN=1005; 15 int n,m,tt; 16 long long dp[40][40]; 17 char s[40][40]; 18 int a[40][40]; 19 int d[2][2]={1,0,0,1}; 20 long long dfs(int x,int y) 21 { 22 if(dp[x][y]||!a[x][y]) return dp[x][y]; 23 for(int i=0;i<2;i++) 24 { 25 int nx=x+d[i][0]*a[x][y]; 26 int ny=y+d[i][1]*a[x][y]; 27 if(nx>=0&&nx<n&&ny>=0&&ny<n) 28 { 29 dp[x][y]+=dfs(nx,ny); 30 } 31 } 32 return dp[x][y]; 33 } 34 int main() 35 { 36 int i,j,k; 37 #ifndef ONLINE_JUDGE 38 freopen("1.in","r",stdin); 39 #endif 40 while(scanf("%d",&n)!=EOF&&n>0) 41 { 42 for(i=0;i<n;i++) 43 { 44 scanf("%s",s[i]); 45 for(j=0;j<n;j++) 46 { 47 a[i][j]=s[i][j]-'0'; 48 } 49 } 50 memset(dp,0,sizeof(dp)); 51 dp[n-1][n-1]=1; 52 printf("%I64d\n",dfs(0,0)); 53 } 54 }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 后端思维之高并发处理方案
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· 2025成都.NET开发者Connect圆满结束
· 后端思维之高并发处理方案
· 千万级大表的优化技巧
· 在 VS Code 中,一键安装 MCP Server!
· 10年+ .NET Coder 心语 ── 继承的思维:从思维模式到架构设计的深度解析