hdu 1176 dp 数塔问题

哎,一开始没看到从5开始....

后来写懵了,用了queue正推,记录能到达的节点,p[i+1][j] = max(p[i][j],max(p[i][j-1],p[i][j+1]))

嗯,用stl mle了,自己写queue又tle,不知道为什么嚒,好像bfs我从没a过...

看了dicuss的思路,只看到数塔两个字我就懂了...

只能说巧妙了,区间反向确定我确实没想到...

//数塔问题
/*
    t=0       5
    t=1      456
    t=2     34567
    t=3    2345678
    t=4   123456789
    t=5  0123456789A
*/

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>

const int MAXN= 1e5+10;

using namespace std;

int dp[MAXN][12];
int mov[3]={-1,0,1};

/*bool isOverBorder(int x){
    if(x<0||x>10)return true;
    else return false;
}*/

void init(){
    for(int i=0;i<MAXN;i++){
        for(int j=0;j<11;j++){
            dp[i][j] = 0;
        }
    }
}

int main()
{
    int n;
    while(scanf("%d",&n),n){
        int t,p;
        int maxt = -MAXN;
        init();
        for(int i=0;i<n;i++){
            scanf("%d%d",&p,&t);
            dp[t][p] += 1;
            maxt = max(maxt,t);
        }

        for(int i=maxt-1;i>=0;i--){
            dp[i][0] += max(dp[i+1][0],dp[i+1][1]);
            for(int j=1;j<11;j++){
                dp[i][j] += max(dp[i+1][j],max(dp[i+1][j+1],dp[i+1][j-1]));
            }
        }
        cout<<dp[0][5]<<endl;
    }
    return 0;
}

时间: 2024-10-08 09:04:19

hdu 1176 dp 数塔问题的相关文章

hdu 1176 免费馅饼 (dp 数塔类型)

免费馅饼 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 25712    Accepted Submission(s): 8760 Problem Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的1

HDU 1176免费馅饼 DP数塔问题转化

L - 免费馅饼 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 1176 Appoint description:  prayerhgq  (2015-07-28) System Crawler  (2015-11-21) Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.

HDU2084基础DP数塔

数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 33850    Accepted Submission(s): 20206 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?

HDU1176 DP 数塔

看了大牛的代码后恍然大悟,然后自己开始写,WA了一下午! 这里有两个坑,让我找了一下午! AC代码: #include <iostream>#include <stdio.h>#include <stdlib.h>#include<string.h>#include<iostream>#include<string.h>#include<algorithm>const int maxn = 100000+5;int dp[

hdoj1176 免费馅饼(dp 数塔)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1176 思路: 这道题不复杂,很明显是个dp题,数据比较大,搜索应该会超时,想到如何初始化,注意细节就差不多了.定义dp数组,边输入边初始化,dp[i][j]表示第i秒j处的掉落馅饼个数.dp过程从最后一秒逆向进行更方便,过程中dp[i][j]表示逆向到第i秒j处得到馅饼的最大值.有个坑点:最后输入的一组数据的时间不一定是最后一秒,我在这wa了一发.详见代码: 1 #include<bits/stdc

HDU 1176 DP

题目大意: 在0~10这11个点上面接饼 , 每秒最多往左或往移动一格,或者保持原地不动 令dp[i][j]表示在第 i 秒在 第 j 个点上最多能得到的饼的数量 dp[i][j] = max(dp[i-1][j] , dp[i-1][j-1] , dp[i-1][j+1]) + a[i][j]  //a[i][j]在 i 时刻第 j 个位置会掉下来的饼的数量,如果没有置为0 这里要注意的一点是,最初从 5 号点出发,我们需要考虑到后面即使有饼因为根本无法走到那个位置,因而拿不到饼的情况 1 #

poj3176--Cow Bowling(dp:数塔问题)

Cow Bowling Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14028   Accepted: 9302 Description The cows don't use actual bowling balls when they go bowling. They each take a number (in the range 0..99), though, and line up in a standard

HDU 1176 免费馅饼(简单DP,数塔变形)

Problem Description: 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的10米范围内.馅饼如果掉在了地上当然就不能吃了,所以gameboy马上卸下身上的背包去接.但由于小径两侧都不能站人,所以他只能在小径上接.由于gameboy平时老呆在房间里玩游戏,虽然在游戏中是个身手敏捷的高手,但在现实中运动神经特别迟钝,每秒种只有在移动不超过一米的范围内接住坠落的馅饼.现在给

hdu 1176 免费馅饼(数塔类型)

http://acm.hdu.edu.cn/showproblem.php?pid=1176 免费馅饼 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 33362    Accepted Submission(s): 11410 Problem Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上