【日常练习 DP入门】HDU 1176免费馅饼(数塔变式)

来源:互联网 发布:中联软件 编辑:程序博客网 时间:2024/05/16 17:20

免费馅饼


题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1176


思路:设a[i][j]为第i秒的j位置掉下的馅饼数量,f[i][j]为第i秒在j位置接馅饼最多可以接到的最多馅饼数量。由于每秒只能移动一个位置,因此这一状态可能由三种情况达到:
vec[i - 1][j - 1]
vec[i - 1][j]
vec[i - 1][j + 1]
这三种情况中的最大值加上当前位置可以接到的馅饼数即是当前位置可以接到的最大馅饼数量;


#include<bits/stdc++.h>using namespace std;int vec[100000+5][12];int maxn(int x,int y){    return x>y?x:y;}int main(){    int n;    while(~scanf("%d",&n)&&n){        int maxt = 0;        int t;        memset(vec,0,sizeof(vec));        while(n--){            int x;            scanf("%d%d",&x,&t);            vec[t][x]++;            if(maxt < t){                maxt = t;            }        }        for(int i = maxt - 1;i >= 0;i--){            vec[i][0]+=maxn(vec[i+1][0],vec[i+1][1]);            for(int j = 1;j < 11;j++){                vec[i][j]+=maxn(maxn(vec[i+1][j],vec[i+1][j-1]),vec[i+1][j+1]);            }        }printf("%d\n",vec[0][5]);    }return 0;}
0 0
原创粉丝点击