zoukankan      html  css  js  c++  java
  • 【hiho一下第十二周】刷油漆

    【题目链接】:http://hihocoder.com/problemset/problem/1055

    【题意】

    【题解】

    设f[x][i]表示以第x个节点为根的子树;
    不选x这个节点,然后子树里面选i个其他点能够获得的最大价值;
    在枚举儿子y的时候进行DP,第一层枚举这个子树里面选了多少个节点i->逆序枚举,用01背包的更新方式节省空间;
    第二层,枚举这个儿子的子树里面选了几个节点k(也不包括这个儿子节点);

    f[x][i] = max(f[x][i],f[x][i-k]+f[y][k-1]+v[y])
    //因为f[x][i]不包括x节点本身,然后y以下有k个节点,则对应的状态应该是f[y][k-1]+v[y];
    在根节点(任选)上面再加1个0号节点;
    最后直接输出f[0][m]

    【Number Of WA

    0

    【完整代码】

    #include <bits/stdc++.h>
    using namespace std;
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define LL long long
    #define rep1(i,a,b) for (int i = a;i <= b;i++)
    #define rep2(i,a,b) for (int i = a;i >= b;i--)
    #define mp make_pair
    #define pb push_back
    #define fi first
    #define se second
    #define ms(x,y) memset(x,y,sizeof x)
    
    typedef pair<int,int> pii;
    typedef pair<LL,LL> pll;
    
    const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
    const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
    const double pi = acos(-1.0);
    const int N = 110;
    
    int n,m,v[N],f[N][N];
    vector <int> g[N];
    
    void dfs(int x,int num,int fa)
    {
        for (int y:g[x])
        {
            if (y==fa) continue;
            dfs(y,num-1,x);
            rep2(i,num,0)
                rep1(k,1,i)
                    f[x][i] = max(f[x][i],f[x][i-k]+f[y][k-1]+v[y]);
        }
    }
    
    int main()
    {
        //freopen("F:\\rush.txt","r",stdin);
        ios::sync_with_stdio(false),cin.tie(0);//scanf,puts,printf not use
        cin >> n >> m;
        rep1(i,1,n)
            cin >> v[i];
        rep1(i,1,n-1)
        {
            int x,y;
            cin >> x >> y;
            g[x].pb(y),g[y].pb(x);
        }
        g[0].pb(1);
        dfs(0,m,-1);
        cout << f[0][m] << endl;
        return 0;
    }
    
  • 相关阅读:
    《C++ Primer(第五版)》知识巩固
    Ubuntu下配置安装Hadoop 2.2
    Golang框架beego和bee的开发使用
    C++下混合编译c语言方法总结
    算法导论学习笔记1---排序算法(平台:gcc 4.6.7)
    基于web端去除空格小工具
    Google Map API抓取地图坐标信息小程序
    【算法导论】散列表
    【算法导论】二叉搜索树
    【算法导论】基本数据结构
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7626349.html
Copyright © 2011-2022 走看看