hdu1176 免费馅饼

来源:互联网 发布:java array.tostring 编辑:程序博客网 时间:2024/05/20 21:18

解题思路:动态规划

可以看成倒的塔,这个地方转换过来就快了,状态转移方程:

d[i][j] = max(d[i+1][j-1], d[i+1][j], d[i+1][j-1])

最后答案是d[0][6]


AC代码:

#include <cstdio>#include <cstring>#include <iostream>#include <cmath>#include <algorithm>using namespace std;#define clr(p,v) memset(p,v,sizeof(p))const int maxn = 100010 ;int n, m, C;int d[maxn][13];int main(){    while (~scanf("%d",&n) && n)    {        clr(d, 0);        int tMax = -1;        //Input        for (int i=1; i<=n; ++i)        {            int x, T;            scanf("%d%d", &x, &T);            ++d[T][x+1];            tMax = max(tMax, T);        }        //Calculate        for (int i=tMax-1; i>=0; --i)        {            for (int j=1; j<=11; ++j)            {                d[i][j] += max(d[i+1][j], max(d[i+1][j-1], d[i+1][j+1]));            }        }        //output        printf("%d\n", d[0][6]);    }    return 0;}