zoukankan      html  css  js  c++  java
  • HDU-1561

    依赖背包转化为树形dp

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 #include <queue>
     5 #include <vector>
     6 #define max(x, y) (x > y ? x : y)
     7 #define min(x, y) (x > y ? y : x)
     8 #define INF 0x3f3f3f3f
     9 #define MOD 1000000007
    10 #define Yes printf("Yes
    ")
    11 #define No printf("No
    ")
    12 using namespace std;
    13 typedef long long LL;
    14 typedef pair<int, int> PII;
    15 
    16 const int maxn = 210;
    17 int dp[maxn][maxn];
    18 
    19 vector<int> G[maxn];
    20 int N, M;
    21 
    22 void dfs(int node, int m) {
    23     for (int i = 0; i < G[node].size(); i++) {
    24         if (m > 1) dfs(G[node][i], m - 1);
    25         for (int j = m + 1; j >= 2; j--) {
    26             for (int k = 1; k < j; k++) {
    27                 dp[node][j] = max(dp[node][j], dp[node][j - k] + dp[G[node][i]][k]);
    28             }
    29         }
    30     }
    31 }
    32 
    33 int main(int argc, const char * argv[]) {
    34     while (scanf("%d%d", &N, &M), N + M) {
    35         int u;
    36         memset(dp, 0, sizeof(dp));
    37         for (int i = 0; i <= N; i++) G[i].clear();
    38         for (int i = 1; i <= N; i++) {
    39             scanf("%d%d", &u, &dp[i][1]);
    40             G[u].push_back(i);
    41         }
    42         dfs(0, M);
    43         printf("%d
    ", dp[0][M + 1]);
    44     }
    45     return 0;
    46 }
  • 相关阅读:
    [1] Tornado Todo Day0
    [0] Tornado Todo 开篇
    RNSS和RDSS
    国密随机数检测--2/15 块内频数检测
    国密随机数检测--1/15 单比特频数检测
    FPGA实用通信协议之IIC
    压缩感知(十)
    压缩感知(九)
    压缩感知(八)
    压缩感知(七)
  • 原文地址:https://www.cnblogs.com/xFANx/p/7261005.html
Copyright © 2011-2022 走看看