1270: [BeijingWc2008]雷涛的小猫
Time Limit: 50 Sec Memory Limit: 162 MBSubmit: 1351 Solved: 716
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
Sample Output
HINT
Source
很简单的dp,f1[i]表示高度为i的时候的最大值,f2[i][j]表示小猫在第i个柱子高度为j的时候的最大值,j这一维可以随着高度的枚举而省去
1 #include <bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 inline int read(){ 5 int x=0;int f=1;char ch=getchar(); 6 while(!isdigit(ch)) {if(ch==‘-‘) f=-1;ch=getchar();} 7 while(isdigit(ch)) {x=x*10+ch-‘0‘;ch=getchar();} 8 return x*f; 9 } 10 const int MAXN=1e4+10; 11 namespace zhangenming{ 12 int f1[5010]={},f2[5100]={},map[5010][2010],n,h,dep; 13 void init(){ 14 n=read();h=read();dep=read(); 15 for(int i=1;i<=n;i++){ 16 int xx=read(); 17 for(int j=1;j<=xx;j++){ 18 int yy=read(); 19 map[i][yy]++; 20 } 21 } 22 } 23 void dp(){ 24 for(int i=h;i>=1;i--){ 25 for(int j=1;j<=n;j++){ 26 f2[j]=max(f2[j],f2[j]+map[j][i]); 27 f2[j]=max(f1[i+dep]+map[j][i],f2[j]); 28 f1[i]=max(f1[i],f2[j]); 29 } 30 } 31 cout<<f1[1]<<endl; 32 } 33 } 34 int main(){ 35 using namespace zhangenming; 36 init(); 37 dp(); 38 return 0; 39 }