HDU1176二维DP

来源:互联网 发布:武汉人脾气差 知乎 编辑:程序博客网 时间:2024/05/01 21:15

这个题没什么难的
从地下往上面走
多体会

#include<iostream>#include<string>#include<cmath>#include<cstdio>#include<algorithm>#include<memory.h>using namespace std;int dp[12][100005];int main(){    int n;    while(cin>>n)    {        if(n==0)break;        memset(dp,0,sizeof(dp));        int zt=0;        for(int a=0;a<n;a++)        {            int q,w;            scanf("%d%d",&q,&w);            dp[q][w]++;            zt=max(zt,w);        }        for(int a=zt-1;a>=0;a--)        {            dp[0][a]+=max(dp[1][a+1],dp[0][a+1]);            dp[10][a]+=max(dp[10][a+1],dp[9][a+1]);            for(int b=1;b<=9;b++)            {                dp[b][a]+=max(max(dp[b+1][a+1],dp[b][a+1]),dp[b-1][a+1]);            }        }         printf("%d\n",dp[5][0]);    }    return 0;}
0 0