HDU 1176 免费馅饼 动态规划 数塔变形

来源:互联网 发布:工作任务软件 编辑:程序博客网 时间:2024/06/05 09:45

HDU 1176 免费馅饼

简要分析:
1、空间换时间。边缘数组多开,不用进行首尾的特殊处理。
2、0 不影响结果

代码如下:

#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;#define INF 0x3f3f3f3f#define ms(x, y) memset(x, y, sizeof(x))const double PI = acos(-1.0), eps = 1e-8;int map[100010][13]; // row -> 时间   col -> 位置int main() {    int n,i,j,k,pos,tm,maxT;    while(scanf("%d",&n), n) {        ms(map, 0);        maxT = -1;        for(i=0; i<n; i++) {            scanf("%d%d",&pos,&tm);            map[tm][pos+1] += 1;            maxT = tm>maxT ? tm:maxT;        }        for(i=maxT-1; i>-1; i--) // 倒数第二层开始遍历            for(j=1; j<12; j++)                map[i][j] += max(max(map[i+1][j-1],map[i+1][j]),map[i+1][j+1]); // 两个max选择出三个中最大的        printf("%d\n",map[0][6]);    }    return 0;}
1 0