洛谷 p1434 滑雪
来源:互联网 发布:wsn网络分析器sniffer 编辑:程序博客网 时间:2024/06/05 02:44
洛谷 p1434 滑雪
1.附上70分代码:
#include <stdio.h>#include <string.h>int a[100+10][100+10];int vis[100+10][100+10];int r,c;int next[][2]={{-1,0},{1,0},{0,-1},{0,1}};//上 下 左 右 int max=0;void dfs(int step,int r1,int c1){ int i,j,nr,nc; for(i=0;i<4;i++){ nr=r1+next[i][0]; nc=c1+next[i][1]; if(nr>=1&&nr<=r&&nc>=1&&nc<=c&&vis[nr][nc]==0&&a[r1][c1]>a[nr][nc]){//2此处写成a[r1][c1]>a[nr][nc]查了会 vis[nr][nc]=1; if(max<step+1) max=step+1; dfs(step+1,nr,nc); vis[nr][nc]=0; } }}int main(){ int i,j; memset(vis,0,sizeof(vis)); scanf("%d%d",&r,&c); for(i=1;i<=r;i++)//1漏写了读取数据的循环 for(j=1;j<=c;j++) scanf("%d",&a[i][j]); for(i=1;i<=r;i++) for(j=1;j<=c;j++){ vis[i][j]=1; dfs(1,i,j); vis[i][j]=0; } printf("%d\n",max); return 0;}
2.附上90分代码#include <stdio.h>#include <string.h>int a[100+10][100+10];int vis[100+10][100+10];int r,c;int next[][2]={{-1,0},{1,0},{0,-1},{0,1}};//上 下 左 右 int max=1;//之前 int max=0;仔细想想第一个点就算一步。 void dfs(int step,int r1,int c1){ int i,j,nr,nc; for(i=0;i<4;i++){ nr=r1+next[i][0]; nc=c1+next[i][1]; if(nr>=1&&nr<=r&&nc>=1&&nc<=c&&vis[nr][nc]==0&&a[r1][c1]>a[nr][nc]){//2此处写成a[r1][c1]>a[nr][nc]查了会 vis[nr][nc]=1; if(max<step+1) max=step+1; dfs(step+1,nr,nc); vis[nr][nc]=0; } }}int main(){ int i,j; memset(vis,0,sizeof(vis)); scanf("%d%d",&r,&c); for(i=1;i<=r;i++)//1漏写了读取数据的循环 for(j=1;j<=c;j++) scanf("%d",&a[i][j]); for(i=1;i<=r;i++) for(j=1;j<=c;j++){ vis[i][j]=1; dfs(1,i,j); vis[i][j]=0; } printf("%d\n",max); return 0;}
3.附上90分剪枝代码:#include <stdio.h>#include <string.h>int a[100+10][100+10];int vis[100+10][100+10];int d[100+10][100+10];int r,c;int next[][2]={{-1,0},{1,0},{0,-1},{0,1}};//上 下 左 右 int max=1;//3之前 int max=0;仔细想想第一个点就算一步。 修改此处过了测试点3,5 void dfs(int step,int r1,int c1){ int i,j,nr,nc; if(step<d[r1][c1])//剪枝 return; d[r1][c1]=step;//记忆 for(i=0;i<4;i++){ nr=r1+next[i][0]; nc=c1+next[i][1]; if(nr>=1&&nr<=r&&nc>=1&&nc<=c&&vis[nr][nc]==0&&a[r1][c1]>a[nr][nc]){//2此处写成a[r1][c1]>a[nr][nc]查了会 vis[nr][nc]=1; if(max<step+1) max=step+1; dfs(step+1,nr,nc); vis[nr][nc]=0; } }}int main(){ int i,j; memset(vis,0,sizeof(vis)); memset(d,0,sizeof(d)); scanf("%d%d",&r,&c); for(i=1;i<=r;i++)//1漏写了读取数据的循环 for(j=1;j<=c;j++) scanf("%d",&a[i][j]); for(i=1;i<=r;i++) for(j=1;j<=c;j++){ vis[i][j]=1; dfs(1,i,j); vis[i][j]=0; } printf("%d\n",max); return 0;}
4.附上AC代码,记忆搜索,大改版代码,为了10分,程序大改。#include <stdio.h>#include <string.h>int a[100+10][100+10];int d[100+10][100+10];int r,c;int next[][2]={{-1,0},{1,0},{0,-1},{0,1}};//上 下 左 右 int fun(int a,int b){ if(a>b) return a; else return b;} int dfs(int step,int r1,int c1){ int i,j,nr,nc,t=1;//请注意,初始化t=1 if(d[r1][c1]>0) return d[r1][c1]; for(i=0;i<4;i++){ nr=r1+next[i][0]; nc=c1+next[i][1]; if(nr>=1&&nr<=r&&nc>=1&&nc<=c&&a[r1][c1]>a[nr][nc]){//2此处写成a[r1][c1]>a[nr][nc]查了会 t=fun(t,dfs(step+1,nr,nc)+1); } } d[r1][c1]=t; return t;}int main(){ int i,j,max=1; memset(d,0,sizeof(d)); scanf("%d%d",&r,&c); for(i=1;i<=r;i++)//1漏写了读取数据的循环 for(j=1;j<=c;j++) scanf("%d",&a[i][j]); for(i=1;i<=r;i++) for(j=1;j<=c;j++){ max=fun(max,dfs(1,i,j));//此处写成 max=(max,dfs(1,i,j));查了会 } printf("%d\n",max); return 0;}
2017-4-12 0 0
- 洛谷 P1434 滑雪
- 洛谷 P1434 滑雪
- 洛谷P1434 滑雪
- 洛谷 p1434 滑雪
- 【洛谷P1434】滑雪
- 搜索 洛谷 P1434滑雪
- 洛谷p1434滑雪
- 洛谷P1434 滑雪(记忆化)
- 洛谷P1434-滑雪【线性化Dp】
- P1434 滑雪
- P1434 滑雪
- P1434 滑雪
- 洛古 P1434 滑雪
- Luogu P1434 滑雪
- P1434 滑雪(记忆化搜索)
- 洛谷1434 滑雪
- 洛谷P14341 滑雪
- 滑雪
- OpenWrt UCI 学习笔记
- JavaScript简介
- 分页符的使用
- 在页面中直接嵌入JavaScript代码
- 笔记 Java web实现用户登录、数据库数据查询、数据删除等功能
- 洛谷 p1434 滑雪
- 关于Anroid(安卓)的一些正则
- 林子雨—大数据技术原理与应用—上机实验三
- 判断浏览器是否支持JavaScript的方法
- Javascript使用外部文件
- 调用系统的设置纯代码实现
- CAS退出后跳转到登陆页面或者指定页
- React Native常见问题汇总(持续更新ing)
- Javascript字符串