1. 程式人生 > >HDU 1176(二維動態規劃)

HDU 1176(二維動態規劃)

分析: 和2084的數塔非常相似,不同的只是此題只用求三個數的最值。其實本質一樣的,即自頂向底找一條權值最大的路徑。理解數塔,這題也就更好理解了。

數塔分析模型

對於每一個位置,它下方的三個數是它下一秒可以到達的位置。
因此要求0秒5位置可以或得的最大值,只需自底向上更新資料。
dp[i][j]+=max(dp[i+1][j-1],dp[i+1][j],dp[i+1][j+1]);
dp[i][j] 表示,第i秒,在位置j處可或得的最大值。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; #define N 100002 int dp[N][15]; int maxx(int a,int b,int c) { a=max(a,b); c=max(a,c); return c; } int main() { int n,x,t; while(scanf("%d",&n),n) { int max_t=0; memset(dp,0,sizeof(dp)); while(n--) { scanf("%d%d"
,&x,&t); dp[t][x]++; max_t=max(max_t,t); } for(int i=max_t-1;i>=0;i--) for(int j=0;j<11;j++) dp[i][j]+=maxx(dp[i+1][j-1],dp[i+1][j],dp[i+1][j+1]); printf("%d\n",dp[0][5]); } return 0; }