HDU 1078 FatMouse and Cheese(记忆化搜索DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1078
题目大意:一个n*n的图,每个点都有奶酪,老鼠从(0,0)开始走,每次最多只能走k步就要停下来,停下的这个位置的奶酪数只能比上一个停留的位置大,并获取其奶酪,每次只能水平或垂直走,问最多能得到的奶酪。
解题思路:记忆化搜索,这方面还是写的太少,还要看别人才会,这个就当个例子参考吧。
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 const int N=1e2+5; 6 int a[N][N],dp[N][N]; 7 int d[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; 8 int n,k; 9 10 int dfs(int x,int y){ 11 int res=0; 12 if(dp[x][y]) return dp[x][y]; 13 for(int i=0;i<4;i++){ 14 for(int j=1;j<=k;j++){ 15 int xx=x+d[i][0]*j; 16 int yy=y+d[i][1]*j; 17 if(xx<1||xx>n||yy<1||yy>n) 18 continue; 19 if(a[xx][yy]>a[x][y]) 20 res=max(res,dfs(xx,yy)); 21 } 22 } 23 dp[x][y]=res+a[x][y]; 24 return dp[x][y]; 25 } 26 27 int main(){ 28 while(~scanf("%d%d",&n,&k)){ 29 if(n==-1&&k==-1) 30 break; 31 memset(dp,0,sizeof(dp)); 32 for(int i=1;i<=n;i++){ 33 for(int j=1;j<=n;j++){ 34 scanf("%d",&a[i][j]); 35 } 36 } 37 printf("%d\n",dfs(1,1)); 38 } 39 return 0; 40 }
标签:
dp
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· 趁着过年的时候手搓了一个低代码框架
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· 乌龟冬眠箱湿度监控系统和AI辅助建议功能的实现