jzoj 5661. 【GDOI2018Day1模拟4.17】药香沁鼻 dp

原创 2018年04月17日 14:41:00

Description

这里写图片描述

Input

这里写图片描述

Output

这里写图片描述

Sample Input

6 9
1 1 1
1 1 100
8 1 1
1 3 6
2 3 1000
4 1 4

Sample Output

105
【样例解释】
其中一种最优解为:小 C?用 8 点能量摘下第 1,2,4,6 朵花,并放在药材中熬煮,由于第 4 朵花所钦慕的 3 号花不在药材中,所以第 4 朵花渐渐枯萎消失。最后剩下 3 朵花:1,2,6,药材所获得的最大贡献为 1+100+4=105。

Data Constraint
这里写图片描述

分析:其实复杂度主要浪费在合并两个儿子的答案。所以我们可以把一个儿子的答案直接给下一个儿子,就可以了。也就是设f[i][j]表示从根选到i,以及i点左边的子树,容量为j的答案,转移显然。

代码:

#include <iostream>
#include <cstdio>
#include <cmath>

const int maxn=5007;

using namespace std;

int f[maxn][10003];
int n,p,x,cnt;
int val[maxn],w[maxn],ls[maxn],size[maxn],dfn[maxn];

struct node{
    int y,next,w;
}g[maxn*4];

void dfs(int x)
{
    dfn[++cnt]=x;
    size[x]=1;
    for (int i=ls[x];i>0;i=g[i].next)
    {
        dfs(g[i].y);
        size[x]+=size[g[i].y];
    }
}

int main()
{
    freopen("medicine.in","r",stdin);
    freopen("medicine.out","w",stdout);
    scanf("%d%d",&n,&p);
    for (int i=1;i<=n;i++)
    {
        scanf("%d%d%d",&w[i],&x,&val[i]);
        if (i!=1)
        {
            g[i].y=i;
            g[i].next=ls[x];
            ls[x]=i;
        }
    }
    dfs(1); 
    for (int i=n;i>0;i--)
    {
        int k=dfn[i];
        for (int j=0;j<=p;j++) f[i][j]=max(f[i+size[k]][j],0);
        for (int j=w[k];j<=p;j++) f[i][j]=max(f[i][j],f[i+1][j-w[k]]+val[k]);
    }
    int ans=0;
    for (int i=0;i<=p;i++) ans=max(ans,f[1][i]);
    printf("%d",ans);
}
版权声明:2333 https://blog.csdn.net/liangzihao1/article/details/79974605

洛谷 P3808 【模板】AC自动机(简单版)

题目背景这是一道简单的AC自动机模板题。用于检测正确性以及算法常数。为了防止卡OJ,在保证正确的基础上只有两组数据,请不要恶意提交。管理员提示:本题数据内有重复的单词,且重复单词应该计算多次,请各位注...
  • liangzihao1
  • liangzihao1
  • 2018-04-18 17:22:20
  • 9

jzoj 5662. 【GDOI2018Day1模拟4.17】尺树寸泓

题目大意: 思路: 平衡树很简单了,学过的大概多知道,推一推会发现,他的sum是和只有旋转点会变,mul所有的父亲都会变,在多次旋转后可能为一条链,那么时间复杂度就会爆炸。 这时我们可以...
  • qq872425710
  • qq872425710
  • 2018-04-17 21:00:12
  • 39

SQL重复记录查询 查询多个字段、多表查询、删除重复记录

SQL重复记录查询(转载) 1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select ...
  • deng11342
  • deng11342
  • 2012-05-24 17:28:53
  • 2123

【杜教筛】【GDOI2018Day1模拟4.17】呼吸决定

题意 求∑ni=1μ(i)∗im∑i=1nμ(i)∗im\sum_{i=1}^n μ(i)*i^m m&amp;lt;=2e5 n&amp;lt;=1e9 题解 设pi=μ(i)∗im|si...
  • Fate_Zero_Saber
  • Fate_Zero_Saber
  • 2018-04-18 21:48:30
  • 19

jzoj 5661. 【GDOI2018Day1模拟4.17】药香沁鼻

题目大意: 思路: 因为选y一定要先选x,所以这是一题0.1分数规划的树形依赖背包。(比较懒) 先用dfs把树转化成序列,如果cnt&amp;gt;W[I]那么就是可以装下的那么当先点的...
  • qq872425710
  • qq872425710
  • 2018-04-17 20:43:37
  • 15

jzoj5661 [GDOI2018Day1模拟4.17]药香沁鼻

Description 给定一棵树,每个节点有价值和体积。已知选择一个节点需要满足它的父亲节点也被选择,根据给出的背包容量求能获得的最大价值 Solution 题目是图片懒得放惹 这种...
  • jpwang8
  • jpwang8
  • 2018-04-17 15:52:21
  • 7

【GDOI2018Day1模拟4.17】药香沁鼻

题目 分析 首先求出这棵树的dfs序,设lx表示以x为根的子树中的dfs序最小值(即点x的dfs序),设rx表示以x为根的子树中的dfs序最大值。 然后按照dfs序枚举点,每个点维护一个背包...
  • A_loud_name
  • A_loud_name
  • 2018-04-17 18:54:57
  • 8

【JZOJ5661】【GDOI2018Day1模拟4.17】药香沁鼻(树形背包)

Problem   还剩P点能量值的小C要用N朵花煮药,每朵花i有三个信息: 1. 摘下它需要花Wi点能量; 2. 有一朵钦慕的花fi(保证1≤fi≤max(1,i-1)),煮药时,若fi不在药...
  • qq_36551189
  • qq_36551189
  • 2018-04-19 11:49:38
  • 11

JZOJ 5662. 【GDOI2018Day1模拟4.17】尺树寸泓

JZOJ 5662. 【GDOI2018Day1模拟4.17】尺树寸泓 DescriptionInputOutputSample Input3 4 1 2 3 1 0 0 1 0 0 2 1 ...
  • liyizhixl
  • liyizhixl
  • 2018-04-19 17:45:32
  • 10

jzoj5662 [GDOI2018Day1模拟4.17]尺树寸泓

Description 给定一棵splay,每个节点都有一个权值,节点x的价值为以x为根的子树中所有节点的权值和 分别有一下三种操作: 0 x:将x节点左旋 1 x:将x节点右旋 2 x...
  • jpwang8
  • jpwang8
  • 2018-04-17 21:03:49
  • 9
收藏助手
不良信息举报
您举报文章:jzoj 5661. 【GDOI2018Day1模拟4.17】药香沁鼻 dp
举报原因:
原因补充:

(最多只允许输入30个字)