hdu1176免费馅饼(DP)

来源:互联网 发布:网络高清摄像头一体机 编辑:程序博客网 时间:2024/06/09 14:02

题目链接:hdu1176

/*思路:有点类似数塔问题。人一开始是站在5那个位置。d[i][j]表示第i时刻在第j位置拿到的馅饼数自底向上计算:d[i][j]=max(d[i+1][j-1],d[i+1][j],d[i+1][j+1])+a[i][j];*/#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int inf = 0x3f3f3f3f;const int N = 100010;int a[N][20],d[N][20];int main(){    int T,i,j,n,m,k,t;    while(scanf("%d",&n),n)    {        int x,y;        memset(a, 0, sizeof(a));        int lim = 0;        for(i = 0; i < n; i ++){            scanf("%d%d",&x,&t);            a[t][++x] ++;//将坐标都加1,防止越界            lim = max(lim, t);        }        int ans = 0;        memset(d, 0, sizeof(d));        for(i = lim; i >= 0; i --)//注意循环顺序,第一层循环为时间            for(j = 11; j >= 1; j --){                d[i][j] = max(d[i+1][j-1], d[i+1][j+1]);                d[i][j] = max(d[i][j], d[i+1][j]);                d[i][j] += a[i][j];            }        printf("%d\n",d[0][6]);    }    return 0;}


0 0