zju 1107
来源:互联网 发布:log4j2 数据库 编辑:程序博客网 时间:2024/06/16 21:38
题目意思是给定一幅图,老鼠只能前后左右移动且最多移动k个格子(不一定在同一行或同一列,但不这样考虑也可以过。。。。),每个格子均有一定权值的食物,问从起点(0,0)开始出发的老鼠,怎么走可以获得权值最大的食物,同时要求下一个到达的格子的食物权值大于当前格子的。
和poj的滑雪一题几乎一致,解题方法自然也是记忆化搜索。
代码很简单:
#include<cstdio>#include<cstring>#include<iostream>#include<utility>#include<string>#include<set>#include<vector>#include<stack>#include<algorithm>#include<queue>#include<cstdlib>#include<cmath>using namespace std;const int N=200;int map[N][N];int vis[N][N];int dir[4][2]={0,1,0,-1,-1,0,1,0};int n,k;void init(){for(int i=0;i<n;i++){for(int j=0;j<n;j++){scanf("%d",&map[i][j]);vis[i][j]=0;}}}bool check(int x,int y){if(0<=x && x<n && 0<=y && y<n)return true;elsereturn false;}int dfs(int x,int y){if(vis[x][y]!=0) return vis[x][y];int max=0;for(int i=1;i<=k;i++){for(int j=1;j<=k;j++){for(int t=0;t<4;t++){int x1=x+i*dir[t][0];int y1=y+j*dir[t][1];if(check(x1,y1) && map[x][y]<map[x1][y1]){vis[x1][y1]=dfs(x1,y1);if(vis[x1][y1]>max) max=vis[x1][y1];}}}}return map[x][y]+max;}int main(){while(scanf("%d%d",&n,&k)==2){if(n==-1 && k==-1) break;init();printf("%d\n",dfs(0,0));}return 0;}
- zju 1107
- zju 1394
- ZJU 1002
- zju 1091
- zju 1025
- zju 2870
- ZJU-1042
- ZJU-1074
- ZJU-1070
- ZJU-1067
- ZJU-1066
- ZJU-1073
- ZJU-1076
- ZJU-1078
- ZJU-2722
- ZJU-1089
- ZJU-1090
- ZJU-1091
- Linux内核中增加自己的驱动代码
- 定时通知(Notification)刷新实现SurfaceView双缓冲机制
- Ext学习笔记(-)基础部分
- 阮一峰:jQuery官方基础教程笔记
- 关于C语言中的EOF
- zju 1107
- 如何用asp 获取post的页面的数据( 最基本的POST格式,便于学习MVC)
- 搭建一个Flv视频播放服务器
- C++对象类型转换问题概括总结
- Java与咖啡豆 - Java命名由来?
- 吕工帮我解决的字符转换问题
- 关于无语程序员(转)
- 基础as2 转AS3笔记
- C#数组