zoukankan      html  css  js  c++  java
  • P1270 “访问”美术馆——不太一样的树形DP

    P1270 “访问”美术馆

    dfs读入,存图有点像线段树;

    在枚举时间时,要减去走这条边的代价;

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int maxn=1010;
    
    struct node
    {
        int tim,pic;
    }t[maxn];
    int s;
    
    void read(int x)
    {
        scanf("%d%d",&t[x].tim,&t[x].pic);
        t[x].tim*=2;
        if(!t[x].pic)
        {
            read(x<<1);
            read((x<<1)+1);
        }
    }
    
    int dp[maxn][maxn];
    
    void dfs(int x,int ti)
    {
        if(dp[x][ti]||!ti) return ;
        if(t[x].pic)
        {
            dp[x][ti]=min(t[x].pic,(ti-t[x].tim)/5);
            return ;
        }
        
        for(int i=0;i<=ti-t[x].tim;i++)
        {
            dfs(x<<1,i);
            dfs((x<<1)+1,ti-i-t[x].tim);
            dp[x][ti]=max(dp[x][ti],dp[x<<1][i]+dp[(x<<1)+1][ti-i-t[x].tim]);
        }
    }
    
    int main()
    {
        scanf("%d",&s);
        s--;
        read(1);
        dfs(1,s);
        printf("%d",dp[1][s]);
        return 0;
    }
    View Code
  • 相关阅读:
    FreePascal
    Delphi
    FreePascal
    FreePascal
    Linux
    FreePascal
    FreePascal
    CodeTyphon
    IDEA
    工作流科普——don't ask i don't know either
  • 原文地址:https://www.cnblogs.com/WHFF521/p/11769098.html
Copyright © 2011-2022 走看看