zoukankan      html  css  js  c++  java
  • 树形背包模板

    bzoj2427 : [HAOI2010]软件安装

    int dfs(int x) {
        int cnt = 0;
        f[x][0] = cv[x];
        for(int i = chead[x]; i; i = cdge[i].nxt) {
            int y = cdge[i].to;
            int sonsiz = dfs(y);
            cnt += sonsiz + cw[y];
            for(int j = m; j >= 0; --j) {
                for(int k = 0; k <= sonsiz; ++k) {
                    if(j - k - cw[y] >= 0) f[x][j] = max(f[x][j], f[x][j - k - cw[y]] + f[y][k]);
                }
            }
        }
        return cnt;
    }
    

    (一些特别奇怪的地方带 'c' 就是跟 scc 有关的东西)

    存在依赖关系:要选子树必须选根

    感觉这样不用多开一个数组代码也短写起来很爽

    f[x][0] = v[x] 默认选上了这个节点,所以后面转移的时候也要相应的减去对应根的体积

    这题就注意一下会形成一个几基环树森林加一个 tarjan 缩一下点

    Luogu P2014:选课

    物品体积均为 1

    其他的和上个题一样

    int dfs(int cur){
        int cnt=0;
        
        for(int i=head[cur];i;i=edge[i].nxt){
            int y=edge[i].to;
            int md=dfs(y);
            cnt+=md+1;
            for(int j=m;j>=0;j--){
                for(int k=0;k<=md;k++){
                    if(j-k-1>=0)f[cur][j]=mx(f[cur][j],f[y][k]+f[cur][j-k-1]);
                }
            }
        }
        return cnt;
    }
    
    禁止诸如开发者知识库/布布扣/码迷/学步园/马开东等 copy 他人博文乃至博客的网站转载 ,用户转载请注明出处:https://www.cnblogs.com/xcysblog/
  • 相关阅读:
    645. Set Mismatch
    400. Nth Digit
    633. Sum of Square Numbers
    507. Perfect Number
    453. Minimum Moves to Equal Array Elements
    441. Arranging Coins
    Girls and Boys
    二分图
    Gap
    SZU-A22
  • 原文地址:https://www.cnblogs.com/xcysblog/p/9314622.html
Copyright © 2011-2022 走看看