简单dp——HDU

题目含义
看了就能理解,一个人捡馅饼

题目分析

这和数塔的题做法一样

一个时间就是一层塔,11个位置就是一层塔有11个数

可以从塔底到塔顶dp,dp公式是dp[i][j]+=max(dp[i+1][j-1],dp[i+1][j],dp[i+1][j+1])

题目代码

#include <stdio.h>
#include <string.h>
#include <iostream>
#include<algorithm>
using namespace std;
const int maxn=1e5+7;
int dp[maxn][11],x,t,n;
int main(){
    while(scanf("%d",&n)&&n){
        memset(dp,0,sizeof(dp));
        int maxt=0;
        for(int i=0;i<n;i++){
            scanf("%d%d",&x,&t);
            dp[t][x]++;
            if(t>maxt)maxt=t;
        }
        for(int i=maxt-1;i>=0;i--)
        for(int j=0;j<=10;j++){
            if(!j)dp[i][j]+=max(dp[i+1][j],dp[i+1][j+1]);
            else if(j==10)dp[i][j]+=max(dp[i+1][j],dp[i+1][j-1]);
            else dp[i][j]+=max(dp[i+1][j],max(dp[i+1][j-1],dp[i+1][j+1]));
        }
        printf("%d
",dp[0][5]);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/helman/p/11227926.html