HDOJ 1176 免费馅饼 简单解题报告

    数塔的变形体,额,这么一想就简单多了。。。

第0秒                         5

第1秒                 4 5 6

第2秒              3 4 5 6 7

第3秒           2 3 4 5 6 7 8

第4秒         1 2 3 4 5 6 7 8 9

第5秒      0 1 2 3 4 5 6 7 8 9 10

第6秒      0 1 2 3 4 5 6 7 8 9 10

...

    和数塔相同的解法,自下而上,取较大值即可,下面是笔者的AC的代码:

#include <iostream>
using namespace std;

int maxOfThree(int a,int b,int c)
{
    return a>b?(a>c?a:c):(b>c?b:c);
}

int dp[13][100010];

int main()
{
    int i,j,n,a,b,max;
    while(scanf("%d",&n) && n)
    {
        memset(dp,0,sizeof(dp));
        max=0;
        for(i=0;i<n;i++)
        {
            scanf("%d%d",&a,&b);
            dp[a+1][b]++;
            if(max<b)
                max=b;
        }
        for(i=max-1;i>=0;i--)
            for(j=1;j<=11;j++)
                dp[j][i]+=maxOfThree(dp[j][i+1],dp[j-1][i+1],dp[j+1][i+1]);
        cout<<dp[6][0]<<endl;
    }
}

    面对一个问题,看的越深入,方法越简单。

posted @ 2013-02-06 22:25  SF-_-  阅读(399)  评论(0编辑  收藏  举报