bzoj1270: [BeijingWc2008]雷涛的小猫

来源:互联网 发布:单片机书籍 编辑:程序博客网 时间:2024/05/01 23:06

题解

  这题很休闲的
  随便搞一个f[i][j]然后随便维护一个每一层的最小值g[j]20行码完交上去。咦?MLE了?
  真是gg
  滚动数组

代码

//动态规划#include <cstdio>#include <algorithm>#include <vector>#define maxn 5010using namespace std;int f[maxn][2], N, H, D, g[maxn];vector<int> honoka[maxn];int main(){    int i, j, n, x;    scanf("%d%d%d",&N,&H,&D);    for(i=1;i<=N;i++)        for(scanf("%d",&n);n;n--)scanf("%d",&x),honoka[x].push_back(i);    for(j=H;j;j--)    {        for(i=1;i<=N;i++)f[i][j&1]=0;        for(i=0;i<honoka[j].size();i++)f[honoka[j][i]][j&1]++;        for(i=1;i<=N;i++)f[i][j&1]+=max(f[i][~j&1],g[j+D]), g[j]=max(g[j],f[i][j&1]);    }    printf("%d",g[1]);    return 0;}
0 0
原创粉丝点击