• UVa 1407 树形背包 Caves


    这道题可以和POJ 2486 树形背包DP Apple Tree比较着来做。

    参考题解

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 #include <vector>
     6 using namespace std;
     7 
     8 const int maxn = 500 + 10;
     9 
    10 int n, Q;
    11 vector<int> G[maxn], C[maxn];
    12 
    13 int d[maxn][maxn][2], cnt[maxn];
    14 
    15 void dfs(int u)
    16 {
    17     cnt[u] = 1;
    18     d[u][1][0] = d[u][1][1] = 0;
    19     for(int i = 0; i < G[u].size(); i++)
    20     {
    21         int v = G[u][i];
    22         int w = C[u][i];
    23         dfs(v);
    24         cnt[u] += cnt[v];
    25 
    26         for(int j = cnt[u]; j >= 2; j--)
    27             for(int x = 0; x <= j && x <= cnt[v]; x++)
    28             {
    29                 d[u][j][0] = min(d[u][j][0], d[v][x][0] + d[u][j-x][0] + w * 2);
    30                 d[u][j][1] = min(d[u][j][1], d[v][x][0] + d[u][j-x][1] + w * 2);
    31                 d[u][j][1] = min(d[u][j][1], d[v][x][1] + d[u][j-x][0] + w);
    32             }
    33     }
    34 }
    35 
    36 int main()
    37 {
    38     int kase = 1;
    39     while(scanf("%d", &n) == 1 && n)
    40     {
    41         for(int i = 0; i < n; i++) { G[i].clear(); C[i].clear(); }
    42         for(int i = 1; i < n; i++)
    43         {
    44             int a, b, d; scanf("%d%d%d", &a, &b, &d);
    45             G[b].push_back(a); C[b].push_back(d);
    46         }
    47 
    48         memset(d, 0x3f, sizeof(d));
    49         dfs(0);
    50 
    51         printf("Case %d:
    ", kase++);
    52         scanf("%d", &Q);
    53         while(Q--)
    54         {
    55             int x; scanf("%d", &x);
    56             int ans;
    57             for(ans = n; ans > 0; ans--) if(d[0][ans][1] <= x) break;
    58             printf("%d
    ", ans);
    59         }
    60     }
    61 
    62     return 0;
    63 }
    代码君
  • 相关阅读:
    ASP.NET刷新页面的六种方法
    web安全攻防实践能力培养引导
    流程控制 ifwhilefor 语句
    迭代器和生成器
    闭包函数装饰器
    元组字典集合及内置方法
    字符编码与文件操作
    字符类型及内置方法
    初识函数
    递归匿名函数常用的内置方法
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/4701127.html
Copyright © 2020-2023  润新知