zoukankan      html  css  js  c++  java
  • 【BZOJ】1270 [BeijingWc2008]雷涛的小猫

    【算法】DP

    【题解】f1[i]表示第i棵树当前高度能得到的最多果子数

    f2[i]表示高度i能得到的最多果子数。

    于是有:

    f1[j]=max(f1[j],f2[i+delta])+mp[j][i];
    f2[i]=max(f2[i],f1[j]);

    注意i+delta的范围。

    #include<cstdio>
    #include<cctype>
    #include<algorithm>
    using namespace std;
    const int maxn=2010;
    int f1[maxn*3],f2[maxn*3],mp[maxn][maxn],n,h,delta;
    int read()
    {
        char c;int s=0;
        while(!isdigit(c=getchar()));
        do{s=s*10+c-'0';}while(isdigit(c=getchar()));
        return s;
    }
    int main()
    {
        n=read(),h=read(),delta=read();
        for(int i=1;i<=n;i++)
         {
             int m,k;
             m=read();
             for(int j=1;j<=m;j++)k=read(),mp[i][k]++;
         }
        for(int i=h;i>0;i--)
         {
             for(int j=1;j<=n;j++)
              {
                  f1[j]=max(f1[j],f2[i+delta])+mp[j][i];
                  f2[i]=max(f2[i],f1[j]);
              }
         }
        printf("%d",f2[1]);
        return 0;
    }
    View Code
  • 相关阅读:
    Alpha冲刺
    Alpha冲刺
    抽奖系统(记一次未完成的教训)
    Alpha冲刺
    软件工程
    软工实践
    软工实践
    软工实践
    软工实践
    软工实践
  • 原文地址:https://www.cnblogs.com/onioncyc/p/6244616.html
Copyright © 2011-2022 走看看