现在的位置: 首页 > 综合 > 正文

hdoj 1176

2019年07月31日 ⁄ 综合 ⁄ 共 647字 ⁄ 字号 评论关闭

http://acm.hdu.edu.cn/showproblem.php?pid=1176

#include <iostream>
using namespace std;


const int N = 100004;


//dp[i][j]表示在i秒是在j的最大数
//dp[i][j] = max{ dp[i-1][j-1],dp[i-1][j],dp[i-1][j+1] } + a[i][j]
//a[i][j]表示在i秒在j位置的掉饼数
//可以把a[][]赋给dp[][],减少开支


int dp[N][12];


int main()
{
    int n, maxt, t, x;
    int i, tmax;
    while(scanf("%d", &n) && n)
    {
        memset(dp, 0, sizeof(dp));
        maxt = 0;
        for(i = 0; i < n; i++)
        {
            scanf("%d%d",&x, &t);
            if(t > maxt)
                maxt = t;
            dp[t][x]++;
        }


        
        t = maxt;
        for(t --; t >= 0; t--)
        {
            for(i = 0; i <= 10; i++)
            {
                if(i == 0)
                    tmax = max(dp[t + 1][i], dp[t + 1][i + 1]);
                else if(i == 10)
                    tmax = max(dp[t + 1][i], dp[t + 1][i - 1]);
                else
                {
                    tmax = max(dp[t + 1][i - 1], dp[t + 1][i]);
                    tmax = max(tmax, dp[t + 1][i + 1]);
                }
                dp[t][i] += tmax;
            }
        }
        printf("%d\n", dp[0][5]);
    }
    return 0;
}

【上篇】
【下篇】

抱歉!评论已关闭.