[BeijingWc2008][BZOJ1270] 雷涛的小猫|动态规划

1270: [BeijingWc2008]雷涛的小猫

Time Limit: 50 Sec  Memory Limit: 162 MB
Submit: 1002  Solved: 481
[Submit][Status][Discuss]

Description

 

Input

Output

Sample Input

Sample Output

8

HINT

Source

 

唉……第一遍写了个超暴力dp直接跑完了50s。

f1,f2分别表示 高度为i的最大值,当前高度在第i棵上最大值。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
int n,h,mx,delta,a[2005][2005],f1[5005],f2[5005];
inline int read()
{
    int a=0,f=1; char c=getchar();
    while (c<'0'||c>'9') {if (c=='-') f=-1; c=getchar();}
    while (c>='0'&&c<='9') {a=a*10+c-'0'; c=getchar();}
    return a*f;
}
int main()
{
    n=read(); h=read(); delta=read();
    for (int i=1;i<=n;i++)
    {
        int x=read();
        while (x--)
        {
            int j=read();
            a[i][j]++;
        }
    }
    for (int i=h;i>0;i--)
    {
        int t=(i+delta<=h)?f1[i+delta]:0;
        for (int j=1;j<=n;j++)
        {
            f2[j]=max(f2[j],t)+a[j][i];
            f1[i]=max(f1[i],f2[j]);
        }
    }
    printf("%d",f1[1]);
    return 0;
}

 

posted @ 2015-08-15 12:42  ws_fqk  阅读(169)  评论(0编辑  收藏  举报