UVa:10285 Longest Run on a Snowboard
2013-09-02 16:30
260 查看
1Y.
状态转移方程是dp【i】【j】=max{dp【x】【y】}+1.
( x,y)表示(i,j)上下左右四个位置中比p(i,j)低的坐标。
先解决子问题再组合成原问题的解。
因此需要根据每个点的高度排序然后从小到大解决,当然也要记录下每个点的坐标对应到原位置。
状态转移方程是dp【i】【j】=max{dp【x】【y】}+1.
( x,y)表示(i,j)上下左右四个位置中比p(i,j)低的坐标。
先解决子问题再组合成原问题的解。
因此需要根据每个点的高度排序然后从小到大解决,当然也要记录下每个点的坐标对应到原位置。
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; struct P { int x,y,data; }; int grid[105][105],dp[105][105]; int m[4][2]= {{1,0},{0,1},{0,-1},{-1,0}}; P p[10005]; bool cmp(P a,P b) { return a.data<b.data; } int Search(int x,int y) { int mx=0; for(int i=0; i<4; ++i) { int xx=x+m[i][0],yy=y+m[i][1]; if(grid[xx][yy]<grid[x][y]&&dp[xx][yy]>mx) mx=dp[xx][yy]; } return mx+1; } int main() { int T; scanf("%d",&T); while(T--) { memset(dp,0,sizeof(dp)); memset(grid,0,sizeof(grid)); char name[20]; int R,C,n=0; scanf("%s%d%d",name,&R,&C); for(int i=1; i<=R; ++i) for(int j=1; j<=C; ++j) { scanf("%d",&grid[i][j]); p .x=i; p .y=j; p .data=grid[i][j]; n++; } sort(p,p+n,cmp); int mx=0; for(int i=0; i<n; ++i) { int x=p[i].x,y=p[i].y; dp[x][y]=Search(x,y); mx=max(mx,dp[x][y]); } printf("%s: %d\n",name,mx); } return 0; }
相关文章推荐
- [DP 训练] Longest Run on a Snowboard, UVa 10285
- UVa 10285 / POJ 1088 Longest Run on a Snowboard (记忆化搜索)
- uva 10285 - Longest Run on a Snowboard(dp+记忆化搜索)
- UVA - 10285 Longest Run on a Snowboard
- UVA 10285 Longest Run on a Snowboard
- UVa 10285 Longest Run on a Snowboard【记忆化搜索】
- UVA 10285 Longest Run on a Snowboard
- UVa 10285 - Longest Run on a Snowboard
- uva 10285 Longest Run on a Snowboard
- UVA 10285 - Longest Run on a Snowboard (记忆化搜索+dp)
- UVA 10285 - Longest Run on a Snowboard
- UVA 10285(p304)----Longest Run on a Snowboard
- UVA 10285 - Longest Run on a Snowboard
- uva 10285 Longest Run on a Snowboard (记忆化搜索)
- POJ1088 滑雪 | UVa10285 - Longest Run on a Snowboard
- UVA 10285 Longest Run on a Snowboard
- UVa 10285 - Longest Run on a Snowboard
- 习题9-1 UVA 10285 Longest Run on a Snowboard 最长滑雪路径(记忆话搜索)
- UVA 10285 Longest Run on a Snowboard
- UVA 10285 Longest Run on a Snowboard(记忆化搜索)