HDU ACM 1078 FatMouse and Cheese 记忆化+DFS
生活随笔
收集整理的這篇文章主要介紹了
HDU ACM 1078 FatMouse and Cheese 记忆化+DFS
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題意:FatMouse在一個N*N方格上找吃的,每一個點(x,y)有一些吃的,FatMouse從(0,0)的出發(fā)去找吃的。每次最多走k步,他走過的位置能夠吃掉吃的。保證吃的數(shù)量在0-100。規(guī)定他僅僅能水平或者垂直走,每走一步。下一步吃的數(shù)量須要大于此刻所在位置,問FatMouse最多能夠吃多少東西。
須要對步數(shù)進行擴展。
#include<iostream> using namespace std;#define N 101 #define max(a,b) ((a)>(b)?(a):(b)) int dp[N][N],map[N][N]; int k,n; int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};bool ok(int x,int y) //推斷邊界 {return x>=0 && y>=0 && x<n && y<n; }int dfs(int x,int y) //記憶化搜索 {int i,j,max=0,xt,yt,tmp;if(dp[x][y]>0)return dp[x][y];for(i=0;i<4;i++)for(j=1;j<=k;j++){xt=dir[i][0]*j+x;yt=dir[i][1]*j+y;if(ok(xt,yt)&&map[x][y]<map[xt][yt]){tmp=dfs(xt,yt);if(tmp>max) //找到最大的max=tmp;}}dp[x][y]=max+map[x][y];return dp[x][y]; }int main() {int i,j;while(scanf("%d%d",&n,&k)==2 && k!=-1 && n!=-1){for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("%d",&map[i][j]);memset(dp,0,sizeof(dp));cout<<dfs(0,0)<<endl;}return 0; }轉載于:https://www.cnblogs.com/yxwkf/p/5258362.html
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的HDU ACM 1078 FatMouse and Cheese 记忆化+DFS的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django控制器
- 下一篇: 每日总结-2016年3月9日