POJ 1088 滑雪
来源:互联网 发布:马云网络 编辑:程序博客网 时间:2024/06/07 22:03
这道题可以拿搜索做,不过我觉得DP更省点时间,也好理解,多开了一点点内存空间。
记录所有的点的信息,按高度排序,然后再依照高度去找点,标记在一个二维数组里,并记录其中最大的权值。
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int a[105][105],dp[105][105];struct point{ int i,j; int h;};point b[10002];bool cmp(point x,point y){ return x.h<y.h;}int main(){ int n,m,i,j,k,I,J,M; while(~scanf("%d%d",&n,&m)) { k=0; for(i=0; i<=101; i++) { for(j=0;j<=101;j++) a[i][j]=10002; } for(i=1; i<=n; i++) { for(j=1; j<=m; j++) { scanf("%d",&a[i][j]); b[k].h=a[i][j]; b[k].i=i; b[k].j=j; k++; } } sort(b,b+k, cmp); memset(dp,0,sizeof(dp)); M=0; for(i=0; i<k; i++) { I=b[i].i,J=b[i].j; if(a[I+1][J]<a[I][J]&&dp[I][J]<dp[I+1][J]+1) dp[I][J]=dp[I+1][J]+1; if(a[I][J+1]<a[I][J]&&dp[I][J]<dp[I][J+1]+1) dp[I][J]=dp[I][J+1]+1; if(a[I-1][J]<a[I][J]&&dp[I][J]<dp[I-1][J]+1) dp[I][J]=dp[I-1][J]+1; if(a[I][J-1]<a[I][J]&&dp[I][J]<dp[I][J-1]+1) dp[I][J]=dp[I][J-1]+1; if(dp[I][J]>M) M=dp[I][J]; } printf("%d\n",M+1); } return 0;}
0 0
- POJ 1088 滑雪
- POJ 1088 滑雪
- POJ 1088 滑雪
- Poj 1088 滑雪
- poj 1088 滑雪
- 滑雪--POJ--1088
- poj 1088 滑雪(DP)
- POJ 1088 滑雪
- POJ 1088 滑雪
- poj 1088 滑雪
- POJ 1088 滑雪
- poj 1088 滑雪
- POJ 1088 滑雪
- poj 1088 滑雪
- poj 1088 滑雪
- POJ 1088 滑雪 DP
- POJ 1088 滑雪
- Poj 1088 滑雪
- Eclispe 安装 JavaFX
- 静态库的使用
- tp3.2登录退出
- expressjs 的配置与路由
- 深度增强学习之Policy Gradient方法1
- POJ 1088 滑雪
- Python 学习成长记(四)---- Python 流程控制
- maven探究五:发布工程到nexus私服中
- 【面试题】剑指Offer-46-从1加N
- ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务
- Docker的boot2docker.iso镜像使用
- python去字符串两边的空格和换行符
- jetty和tomcat区别与应用场景
- 选择结构