hdu4826(三维DP)
来源:互联网 发布:京都议定书 知乎 编辑:程序博客网 时间:2024/04/29 18:46
这是一个百度之星的资格赛第四题
题目链接:http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1004&cid=500
题意:从左上角的点到右上角的点,每个点只能走一遍,走的方向有三个:向上,向下,向右,求最大值。
咋一看像搜索题,先暴搜,TLE,然后剪枝,还是TLE.然后我就改方法,用DP来做,这题和普通dp相比,多个个向上走的状态,所以加一维。
程序和注释如下:
#include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#include<time.h>#include<math.h>#define inf 0x7fffffff#define N 105#define eps 1e-9#define pi acos(-1.0)#define P system("pause")using namespace std;int a[N][N],dp[N][N][3];//dp[][][0]:左->右 dp[][][1]:上->下 dp[][][2] 下->上 int n,m;int fun(int a,int b,int c){ int t; t = max(a,b); return max(t,c); }int main(){//freopen("input.txt","r",stdin);//freopen("output.txt","w",stdout); int t,z = 1; scanf("%d",&t); while(t--) { int i,j; scanf("%d%d",&n,&m); for(i = 0; i < n; i++) for(j = 0; j < m; j++){ scanf("%d",&a[i][j]); dp[i][j][0] = dp[i][j][1] = dp[i][j][2] = -inf; } dp[0][0][0] = dp[0][0][1] = dp[0][0][2] = a[0][0]; for(i = 1; i < n; i++) dp[i][0][0] = dp[i][0][1] = dp[i][0][2] = dp[i-1][0][0] + a[i][0]; for(i = 1;i < m; i++)//遍历列 { for(j = 0; j < n; j++)//左往右走 dp[j][i][0] = max(dp[j][i][0],fun(dp[j][i-1][0],dp[j][i-1][1],dp[j][i-1][2]) + a[j][i]); for(j = 1; j < n; j++)//上往下走 dp[j][i][1] = max(dp[j][i][1],fun(dp[j-1][i][0],dp[j-1][i][1],dp[j-1][i][2]) + a[j][i]); for(j = n-2; j >= 0; j--)//下往上走,但是这里要注意下,不能有dp[j+1][i][1],使得有通路 dp[j][i][2] = max(dp[j][i][2],max(dp[j+1][i][0],dp[j+1][i][2]) + a[j][i]); } // for(i = 0; i < n; i++){ //for(j = 0; j < m ;j++) // cout<<fun(dp[i][j][0],dp[i][j][1],dp[i][j][2])<<" "; //cout<<endl;} printf("Case #%d:\n",z++); printf("%d\n",fun(dp[0][m-1][0],dp[0][m-1][1],dp[0][m-1][2])); } // P; return 0; }
0 0
- hdu4826(三维DP)
- HDU4826 - Labyrinth(棋盘DP)
- hdu4826---Labyrinth(简单dp)
- HDU4826 Labyrinth(DP)
- HDU4826 - Labyrinth(棋盘DP)
- Coloring Trees (三维DP)
- HOJ 2091 Chess(三维简单DP)
- POJ2626 chess 三维DP
- POJ 1946(三维DP)
- NOJ1859 越野赛 三维DP
- hdu 4427 三维dp
- poj 1695(三维dp)
- 【DP 三维数组】UVA
- NYOJ 61:传纸条(一)(三维DP)
- zoj 2852 Deck of Cards扑克牌(三维dp)
- ZOJ 3605 Find the Marble(dp啊 三维)
- hdu4433(三维DP,后效性)
- HDU 4433 locker(三维dp)
- las点转为Shapefile文件,获取高程信息
- QComboBox显示图片
- 基于事件的程序设计技术简单事例
- 计算几何基础——矢量和叉积
- 矩阵快速幂求斐波那契数列 poj3070
- hdu4826(三维DP)
- POJ 2286 The Rotation Game
- 使用Dom&&Sax完成成绩管理
- 巨头绑架用户 用户体验将回归
- 安装STS报错(三)
- ubuntu eclipse 运行出错 Exit code = 2 解决方案
- ubuntu 词典安装
- 串行化
- C++关键字this