【记忆化搜索】HDU 1078 FatMouse and Cheese
2017-02-27 16:13
477 查看
/* 记忆化搜索 P - FatMouse and Cheese 题意: 从(0,0)出发,每次最多走k格,但每次只能往 值比它现在在的值大的格子走。 题解:dp[i][j] 代表走到(i,j)的最大总值。 dp[i][j] = max(dp[prei][prej]+mp[i][j]){i,j 是 prei,prej能走到的格子} 贡献1T,1Wa,注意题意走K步是只能笔直走K步,导致T。 我以为我nextx是不断更新的,没乘j,导致wa。 */ #include<cstdio> #include<cstring> #include<cmath> #include<iostream> #include<algorithm> #include<queue> #include<stack> #include<map> using namespace std; const int N = 110; int n,k; int dx[5] = {0,0,1,-1}; int dy[5] = {1,-1,0,0}; int mp ,v ; int dp ; bool pan(int i,int j) { if(i >= 0 && i < n && j >= 0 && j < n) return true; return false; } int DFS(int x,int y) { int &ans = dp[x][y]; if(v[x][y]) return ans; ans = mp[x][y]; v[x][y] = 1; for(int i = 0; i < 4; i++) { for(int j = 1; j <= k; j++) { int nextx = x+dx[i]*j,nexty = y+dy[i]*j; if(pan(nextx,nexty) && mp[x][y] < mp[nextx][nexty]) ans = max(ans,DFS(nextx,nexty)+mp[x][y]); } } return ans; } int main() { while(cin >> n >> k) { if(n == -1 && k == -1) break; memset(dp,0,sizeof(dp)); memset(mp,0,sizeof(mp)); memset(v,0,sizeof(v)); for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) scanf("%d",&mp[i][j]); int ans = DFS(0,0); cout << ans << endl; } return 0; }
相关文章推荐
- HDU 1078 FatMouse and Cheese【记忆化搜索】
- hdu 1078 FatMouse and Cheese(深搜----记忆化搜索)
- hdu 1078 FatMouse and Cheese(记忆化搜索)
- hdu 1078 FatMouse and Cheese (记忆化搜索)
- HDU--1078--FatMouse and Cheese--记忆化搜索
- hdu 1078 fatmouse and cheese 记忆化搜索
- HDU - 1078 FatMouse and Cheese(记忆化搜索)
- hdu-1078 FatMouse and Cheese (and) 滑雪问题(记忆化搜索+简单dp)
- HDU 1078 FatMouse and Cheese 记忆化搜索
- FatMouse and Cheese (hdu 1078 记忆化搜索)
- hdu 1078 FatMouse and Cheese(记忆化搜索)
- !HDU 1078 FatMouse and Cheese-dp-(记忆化搜索)
- HDU 1078 FatMouse and Cheese(记忆化搜索)
- FatMouse and Cheese_hdu_1078(记忆化搜索).java
- 【记忆化搜索】HDU-1078 FatMouse and Cheese
- hdu-1078 FatMouse and Cheese (and) 滑雪问题(记忆化搜索+简单dp)
- hdu 1078 FatMouse and Cheese (dfs+记忆化搜索)
- hdu 1078 FatMouse and Cheese(dp 记忆化搜索)
- hdu 1078 FatMouse and Cheese(记忆化搜索)
- HDU 1078 FatMouse and Cheese 简单DP&记忆化搜索