zoukankan      html  css  js  c++  java
  • Vijos P1313 金明的预算方案(树形DP)

    思路:

    树形DP,和选课那题一模一样。有依赖的背包,也叫做泛化背包。

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    
    const int MAXD = 3210;
    const int MAXN = 64;
    
    int dp[MAXN][MAXD];
    int val[MAXN], deg[MAXN], pre[MAXN];
    
    void treedp(int u, int vol, int n)
    {
        if (!vol)
            return ;
    
        for (int i = 1; i <= n; ++i)
        {
            if (pre[i] == u)
            {
                for (int v = 0; v <= vol; ++v)
                    dp[i][v] = dp[u][v];
    
                treedp(i, vol - val[i], n);
    
                for (int v = vol; v >= val[i]; --v)
                    dp[u][v] = max(dp[u][v], dp[i][v - val[i]] + val[i] * deg[i]);
            }
        }
    }
    
    int main()
    {
        int n, vol;
        while (scanf("%d %d", &vol, &n) != EOF)
        {
            vol /= 10;
            for (int i = 1; i <= n; ++i)
                scanf("%d %d %d", &val[i], &deg[i], &pre[i]), val[i] /= 10;
    
            for (int v = 0; v <= vol; ++v)
                dp[0][v] = 0;
    
            treedp(0, vol, n);
            printf("%d\n", dp[0][vol] * 10);
        }
        return 0;
    }
  • 相关阅读:
    vue中height设置为100%却无法铺满整个页面
    cpp快速上手
    CSP_2020061_线性分类器
    cpp快速上手
    算法笔记
    cpp中set的使用
    cpp中vector的使用
    常用命令
    常用git命令
    Linux使用docker安装fastfs
  • 原文地址:https://www.cnblogs.com/kedebug/p/2916358.html
Copyright © 2011-2022 走看看