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; }
时间: 2024-09-30 06:45:20