hdu 1176 免费馅饼 动态规划

来源:互联网 发布:网络食品经营管理办法 编辑:程序博客网 时间:2024/05/16 17:40

题意:初始位置为5,在0-11内每秒移动一格,不同时刻不同地点有馅饼掉下,问接到的馅饼的最多数。

动态规划。一个数塔,正着做倒着做都行,但倒着做可以直接求解初始位置,比较方便,所以我们选择倒着做。d[i][j]=max(d[i+1][j-1],d[i+1][j],d[i+1][j+1])+a[i][j],(i为时间,j为地点)。

#include <iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#define N 110000using namespace std;int d[N][12],a[N][12];int main(){    int n;    while(scanf("%d",&n)&&n)    {        int tmax=0;        memset(d,0,sizeof(d));        memset(a,0,sizeof(a));        for(int i=0;i<n;i++)        {            int x,t;            scanf("%d%d",&x,&t);            a[t][x+1]++;            tmax=max(tmax,t);        }        for(int i=tmax;i>=0;i--)            for(int j=1;j<=11;j++)                for(int k=-1;k<=1;k++)                    d[i][j]=max(d[i][j],a[i][j]+d[i+1][j-k]);        cout<<d[0][6]<<endl;    }}

2 0
原创粉丝点击