[kuangbin带你飞]专题十二 基础DP1 G HDU 1176

来源:互联网 发布:英汉词典软件下载 编辑:程序博客网 时间:2024/06/06 08:51

题目地址:https://vjudge.net/contest/68966#problem/G

思路:数塔的变形,由于初始位置只能是5,所以需要从下往上的处理,我把出现的坐标+1,然后开大一些数组,这样就不用讨论边界了。

AC代码:

#include<bits/stdc++.h>#define INF 0x3f3f3f3fusing namespace std;const int maxn=150000;int dp[maxn][20];int a[maxn][20];int main(){    int n;    while(scanf("%d",&n) && n)    {    memset(dp,0,sizeof(dp));    memset(a,0,sizeof(a));    int maxt=0;    for(int i=0;i<n;i++)    {        int x,y;        scanf("%d%d",&x,&y);        a[y][x+1]++;        if(y>maxt)            maxt=y;    }    for(int i=maxt;i>=0;i--)    {        for(int j=11;j>=1;j--)        {            if(i==maxt)            dp[i][j]=a[i][j];            else            dp[i][j]=max(dp[i+1][j-1],max(dp[i+1][j],dp[i+1][j+1]))+a[i][j];        }    }    printf("%d\n",dp[0][6]);    }}


0 0
原创粉丝点击