HDU/HDOJ 1176 免费馅饼(DP)

题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1176

不得不说,这是一道好题,我想到了用DP,但是没想到怎么用DP.

看了网上解答,才知道原来可以转成数塔问题来做。

来对比1176的图和数塔的图:


图数塔

图1176

以5为塔顶,对折,可以联想到数塔了吧?

以下是AC代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include<iostream>
#include <algorithm>
using namespace std;
 
int dp[11][100001];
 
inline int Max(int a, int b, int c=-1)
{
    if(a < b) a = b;
    if(a < c) a = c;
    return a;
}
 
int main()
{
    int n, i, j;
    int t, x;
    while (scanf("%d", &n)!=EOF && n)
    {
        memset(dp, 0, sizeof(dp));
        int MaxTime = 0;
        for (i=0; i<n; ++i)
        {
            scanf("%d%d", &x, &t);
            ++dp[x][t];
            MaxTime = t>MaxTime ? t:MaxTime;
        }
        for (j=MaxTime-1; j>=0; --j)
        {
            dp[0][j] += Max(dp[0][j+1], dp[1][j+1]);
            dp[10][j] += Max(dp[10][j+1], dp[9][j+1]);
            for (i=1; i<10; ++i)
            {
                dp[i][j] += Max(dp[i][j+1], dp[i+1][j+1], dp[i-1][j+1]);
            }
        }
        printf("%d\n", dp[5][0]);
    }
    return 0;
}

发布者

Tanky Woo

Tanky Woo,[个人主页:https://tankywoo.com] / [新博客:https://blog.tankywoo.com]

《HDU/HDOJ 1176 免费馅饼(DP)》有141个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注