AOJ 2538 Stack Maze
来源:互联网 发布:招聘软件排行 编辑:程序博客网 时间:2024/06/05 22:49
Aizu 2538
题意:给一个迷宫,有一些珠宝和洞,起始位置是左上角,只能往右边和下面走。你可以通过捡起一些珠宝放到一些对应的洞里来得到分数,可以捡起无限多的珠宝,但是背包是一个栈,每次退栈必须得分。问最大的得分。(1<=N,M<=50)
记忆化搜索。
每次求一个矩形里的最大得分情况。由于背包是栈,所以该矩形的情况不具有前效性和后效性。
#include <bits/stdc++.h>using namespace std;const int MAXN=55;const int INF=1e9;bool reachable[MAXN][MAXN][MAXN][MAXN];int dp[MAXN][MAXN][MAXN][MAXN];char s[MAXN][MAXN];int n, m;vector< pair<int, int> > holes[MAXN][MAXN];bool in(int x, int y){ if(x<1||x>n||y<1||y>m||s[x][y]=='#') return false; return true;}int solve(int lx, int ly, int rx, int ry){ int &ret=dp[lx][ly][rx][ry]; if(~ret) return ret; if(lx>rx||ly>ry) return ret=0; if(!in(lx,ly)||!in(rx,ry)||!reachable[lx][ly][rx][ry]) return ret=-INF; ret=0; for(auto p: holes[lx][ly]){ int x=p.first, y=p.second; if(x<lx||x>rx||y<ly||y>ry) continue; ret=max(ret,solve(lx+1,ly,x-1,y)+1+solve(x,y,rx,ry)); ret=max(ret,solve(lx,ly+1,x-1,y)+1+solve(x,y,rx,ry)); ret=max(ret,solve(lx+1,ly,x,y-1)+1+solve(x,y,rx,ry)); ret=max(ret,solve(lx,ly+1,x,y-1)+1+solve(x,y,rx,ry)); } ret=max(ret,solve(lx+1,ly,rx,ry)); ret=max(ret,solve(lx,ly+1,rx,ry)); return ret;}int main(){ while(cin>>n>>m&&(n||m)){ memset(reachable,0,sizeof reachable); memset(holes,0,sizeof holes); memset(dp,-1,sizeof dp); for(int i=1; i<=n; i++){ scanf("%s",s[i]+1); for(int j=1; j<=m; j++) if(s[i][j]!='#'){ reachable[i][j][i][j]=true; for(int k=1; k<=i; k++){ for(int l=1; l<=j; l++){ if(reachable[k][l][i-1][j]||reachable[k][l][i][j-1]){ reachable[k][l][i][j]=true; if(isupper(s[i][j])&&islower(s[k][l])&&s[i][j]==toupper(s[k][l])){ holes[k][l].push_back(make_pair(i,j)); } } } } } } int ans=solve(1,1,n,m); printf("%d\n",ans==-INF?-1:ans); } return 0;}
0 0
- AOJ 2538 Stack Maze
- AOJ 2320 Infinity Maze
- Aizu 2538 Stack Maze【记忆化搜索】
- aoj 6 Hero In Maze
- AOJ-AHU-OJ-6 Hero in Maze
- AOJ problem 6 Hero In Maze
- AOJ 6 Hero In Maze 【BFS】
- AOJ 449 Anagrams by Stack
- AOJ-AHU-OJ-6 Hero in maze(拓展)
- AOJ
- Aoj
- ZOJ-1004(AOJ-466) Anagrams by Stack
- Maze
- maze
- Maze
- maze
- Maze
- maze
- JDBC 数据库连接池 -Dbcp -C3p0
- Java 获取web项目根目录 RootPath
- 设计模式之抽象工厂模式---abstract factory
- Velocity学习整理
- LeetCode: Valid Anagram
- AOJ 2538 Stack Maze
- 黑马程序员——java基础——ServerSocket、Socket构造方法解析
- hdu4089 Activation
- 运用面向对象原则,设计一款音乐点唱机
- NumberPicker循环滚动
- OutMan——C语言中的冒泡排序、选择排序、折半查找以及指针的介绍
- 吉他67的高音怎么弹?
- Hidden String 5311 (深搜+字符串)
- Unity3d中的资源打包和加载