【洛谷P1270】访问美术馆

#include<iostream>
#include<cstdio>
using namespace std;
struct in
{
    int t,num;
}ter[10000];
int dp[1010][1010],n,t;
void init(int ro)
{
    scanf("%d%d",&ter[ro].t,&ter[ro].num);
    ter[ro].t*=2;
    if(!ter[ro].num)//因为是dfs序 
        init(ro*2),init(ro*2+1);
}
void dfs(int ro)
{
    if(!ter[ro*2].t)//如果没有儿子 
    {
        for(int i=0;i<=t;i++)
        {
            int ti=max(0,i-ter[ro].t);//枚举这层所用时间 
            dp[ro][i]=min(ter[ro].num,ti/5);//除5是因为取画需要5s 
        }
        return;
    }
    dfs(ro*2);
    dfs(ro*2+1);
    for(int i=0;i<=t;i++)//枚举一共的时间 
        for(int j=ter[ro].t;j<=i;j++)//枚举在左蛾子花的时间 
            dp[ro][i]=max(dp[ro][i],dp[ro*2][j-ter[ro].t]+dp[ro*2+1][i-j]);
}
int main()
{
    scanf("%d",&t);
    t--; //警察来之前 
    init(1);//预处理 
    dfs(1);
    printf("%d",dp[1][t]);
}

 看我大晚上还更新博客,多热爱学习

posted @ 2017-10-24 23:22  那一抹落日的橙  阅读(137)  评论(0编辑  收藏  举报