1. 程式人生 > >hdu-1176(動態規劃)

hdu-1176(動態規劃)

動態 space else 數塔 pri ring 思路 return printf

題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1176

思路:類似數塔問題,

從最後一秒開始考慮,每次這一秒的狀態確定意味著前一秒的狀態也已經確定,所以從下向上進行dp

註意數組要開大一些。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int MAX(int a,int b)
{
    return a>b?a:b;
}
const int maxn = 100010; int a[maxn][15],n,dp[maxn][15]; int main(void) { int j,i,t,x; while(~scanf("%d",&n)&&n) { memset(a,0,sizeof(a)); int mx=0; for(i=0;i<n;i++) scanf("%d%d",&x,&t),mx=MAX(mx,t),a[t][x]++; for(i=0;i<=10;i++) dp[mx][i]=a[mx][i];
for(i=mx-1;i>=1;i--) { for(j=0;j<=10;j++) if(j==0) dp[i][j]=a[i][j]+MAX(dp[i+1][j],dp[i+1][j+1]); else if(j==10) dp[i][j]=a[i][j]+MAX(dp[i+1][j],dp[i+1][j-1]); else dp[i][j]=a[i][j]+MAX(dp[i+1][j],MAX(dp[i+1][j-1],dp[i+1][j+1])); } printf(
"%d\n",MAX(dp[1][4],MAX(dp[1][5],dp[1][6]))); } return 0; }

hdu-1176(動態規劃)