1. 程式人生 > >BZOJ1270: [BeijingWc2008]雷濤的小貓 DP

BZOJ1270: [BeijingWc2008]雷濤的小貓 DP

題目大意:一隻貓,可以在若干顆數之間瞎蹦,每次瞎蹦需要下降k的長度,到達一個點就獲得該點的收益,問最大收益。
題解:SBDP,F1[i]表示高度為i的時候最大值是多少,F2[i]表示在第i棵樹上時的最大權值為多少,隨便寫寫就行了。

#include<bits/stdc++.h>
using namespace std;
int mapp[5000][5000];
int f1[5000];
int f2[5000];
int main()
{
    int n,h,d;
    scanf("%d%d%d",&n,&h,&d);
    for(int i=1;i<=n;i++)
    {
        int
x; scanf("%d",&x); for(int j=1;j<=x;j++) { int y; scanf("%d",&y); mapp[i][y]++; } } for(int i=h;i>=1;i--) { int temp=i+d>h?0:f1[i+d]; for(int j=1;j<=n;j++) { f2[j]=max(f2[j],temp)+mapp[j][i]; f1[i]=max(f1[i],f2[j]); } } cout
<<f1[1]; return 0; }