日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【HDU - 1078】FatMouse and Cheese (记忆化搜索dp)

發布時間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【HDU - 1078】FatMouse and Cheese (记忆化搜索dp) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題干:

FatMouse has stored some cheese in a city. The city can be considered as a square grid of dimension n: each grid location is labelled (p,q) where 0 <= p < n and 0 <= q < n. At each grid location Fatmouse has hid between 0 and 100 blocks of cheese in a hole. Now he's going to enjoy his favorite food.?

FatMouse begins by standing at location (0,0). He eats up the cheese where he stands and then runs either horizontally or vertically to another location. The problem is that there is a super Cat named Top Killer sitting near his hole, so each time he can run at most k locations to get into the hole before being caught by Top Killer. What is worse -- after eating up the cheese at one location, FatMouse gets fatter. So in order to gain enough energy for his next run, he has to run to a location which have more blocks of cheese than those that were at the current hole.?

Given n, k, and the number of blocks of cheese at each grid location, compute the maximum amount of cheese FatMouse can eat before being unable to move.?

Input

There are several test cases. Each test case consists of?

a line containing two integers between 1 and 100: n and k?
n lines, each with n numbers: the first line contains the number of blocks of cheese at locations (0,0) (0,1) ... (0,n-1); the next line contains the number of blocks of cheese at locations (1,0), (1,1), ... (1,n-1), and so on.?
The input ends with a pair of -1's.?

Output

For each test case output in a line the single integer giving the number of blocks of cheese collected.?

Sample Input

3 1 1 2 5 10 11 6 12 12 7 -1 -1

Sample Output

37

?

題目大意:

有一種游戲是的玩法是這樣的:
有一個n*n的格子,每個格子有一個數字。
遵循以下規則:
1. 玩家每次可以由所在格子向上下左右四個方向進行直線移動,每次移動的距離不得超過m
2. 玩家一開始在第一行第一列,并且已經獲得該格子的分值
3. 玩家獲得每一次移動到的格子的分值
4. 玩家下一次移動到達的格子的分值要比當前玩家所在的格子的分值要大。
5. 游戲所有數字加起來也不大,保證所有數字的和不會超過int型整數的范圍
6. 玩家僅能在n*n的格子內移動,超出格子邊界屬于非法操作
7. 當玩家不能再次移動時,游戲結束
現在問你,玩家所能獲得的最大得分是多少?

輸入是n和m。

?

解題報告:

? ? ?水題,,但是剛開始讀錯題,沒看到只能從(1,1)點開始游戲 這個條件,所以WA了、、

AC代碼:

#include<bits/stdc++.h> #define ll long long using namespace std;int nx[4] = {0,1,0,-1}; int ny[4] = {1,0,-1,0}; ll dp[105][105]; int a[105][105];int n,m; bool ok(int x,int y) {if(x>=1&&x<=n&&y>=1&&y<=n) return 1;else return 0; } ll dfs(int x,int y) {if(dp[x][y] != -1) return dp[x][y];ll res = 0;int tx,ty;for(int k = 0; k<4; k++) {tx = x;ty = y;for(int i = 1; i<=m; i++) {tx += nx[k];ty += ny[k];if(ok(tx,ty)==0) continue;if(a[tx][ty] <= a[x][y]) continue;res = max(res,dfs(tx,ty));}}return dp[x][y]=res+a[x][y];} int main() {while(~scanf("%d%d",&n,&m)) {if(n==-1 && m==-1) break;memset(dp,-1,sizeof dp);ll ans = 0;for(int i = 1; i<=n; i++) {for(int j = 1; j<=n; j++) {scanf("%d",&a[i][j]);}} // for(int i = 1; i<=n; i++) { // for(int j = 1; j<=n; j++) { // ans = max(ans,dfs(i,j)); // } // }ans = dfs(1,1);printf("%lld\n",ans);} return 0 ;}

?

總結

以上是生活随笔為你收集整理的【HDU - 1078】FatMouse and Cheese (记忆化搜索dp)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。