学长留的题,质量还是灰常高的。

而且我树规本身较弱,一道也不想放下

题目链接:https://www.cnblogs.com/Juve/articles/11203824.html

题解:这道题我们可以看出是一个树形结构,而且是dp

dp首先要定义状态

设$dp[i][j][0/1]$表示当前考虑到第i个物品(以i为根的子树中),买了j个物品的代价,0表示不用i的优惠券,1表示使用

初始状态:$dp[i][1][1]=c[i]-d[i],dp[i][1][0]=c[i],dp[i][0][0]=0$,其他都是最大值

目标:$ans=max(i),(dp[1][i][1]<=b)$

转移:  $dp[x][j+k][1]=min(dp[x][j][1]+min(dp[y][k][0],dp[y][k][1]))$

    $dp[x][j+k][0]=min(dp[x][j][0]+dp[y][k][0])$

x表示当前节点,y表示当前搜索到的x的儿子,j是枚举的当前x的size,k是枚举的y的size

方程的话,你看看它代表什么就能理解了

有人说要特判k=0时的情况,因为如果你用优惠券,就必须买这个产品,所以没有dp[i][0][1]这种情况

但其实初始状态中我们把它设成了最大值,所以不会对结果有影响

上代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAXN 5005
#define ll long long
using namespace std;
ll n,b,c[MAXN],d[MAXN],x[MAXN],ans=0;
ll to[MAXN<<1],nxt[MAXN<<1],pre[MAXN],cnt=0;
void add(ll u,ll v){
cnt++,to[cnt]=v,nxt[cnt]=pre[u],pre[u]=cnt;
}
int size[MAXN],dp[MAXN][MAXN][2];//dp[i][j][0/1]:以i为子树,买了j个的价钱,0为不用券,1为用券,
void dfs(ll rt){
size[rt]=1;
dp[rt][1][1]=c[rt]-d[rt],dp[rt][1][0]=c[rt],dp[rt][0][0]=0;
for(ll i=pre[rt];i;i=nxt[i]){
ll y=to[i];
dfs(y);
for(ll j=size[rt];j>=0;j--){
for(ll k=size[y];k>=0;k--){
dp[rt][j+k][1]=min(dp[rt][j+k][1],dp[rt][j][1]+min(dp[y][k][0],dp[y][k][1]));
dp[rt][j+k][0]=min(dp[rt][j+k][0],dp[rt][j][0]+dp[y][k][0]);
}
}
size[rt]+=size[y];
}
}
int main(){
memset(dp,0x3f,sizeof(dp));
scanf("%lld%lld",&n,&b);
scanf("%lld%lld",&c[1],&d[1]);
for(ll i=2;i<=n;i++){
scanf("%lld%lld%lld",&c[i],&d[i],&x[i]);
add(x[i],i);
}
dfs(1);
for(ll i=1;i<=n;i++){
if(dp[1][i][1]<=b)
ans=i;
}
printf("%lld\n",ans);
return 0;
}

HZOI 可怜与超市 树形dp的更多相关文章

  1. HZOI 可怜与超市

    网上搜不着,八成又是哪个学长留下的…… 因为考试第二题我们都好不容易才搞懂,学长有给我们扔了几道类似的题. 其实这道题思路挺好想的,就是一些细节还有复杂度比较难弄,好难调啊. 看到题的第一眼以为是树形 ...

  2. COGS 2532. [HZOI 2016]树之美 树形dp

    可以发现这道题的数据范围有些奇怪,为毛n辣么大,而k只有10 我们从树形dp的角度来考虑这个问题. 如果我们设f[x][k]表示与x距离为k的点的数量,那么我们可以O(1)回答一个询问 可是这样的话d ...

  3. 树形dp 入门

    今天学了树形dp,发现树形dp就是入门难一些,于是好心的我便立志要发一篇树形dp入门的博客了. 树形dp的概念什么的,相信大家都已经明白,这里就不再多说.直接上例题. 一.常规树形DP P1352 没 ...

  4. Codeforces Round #419 (Div. 2) E. Karen and Supermarket(树形dp)

    http://codeforces.com/contest/816/problem/E 题意: 去超市买东西,共有m块钱,每件商品有优惠卷可用,前提是xi商品的优惠券被用.问最多能买多少件商品? 思路 ...

  5. [BZOJ4784][ZJOI2017]仙人掌(树形DP)

    4784: [Zjoi2017]仙人掌 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 312  Solved: 181[Submit][Status] ...

  6. [CF816E] Karen and Supermarket1 [树形dp]

    传送门 - > \(CF816E\) Karen and Supermarket 题意翻译 在回家的路上,凯伦决定到超市停下来买一些杂货. 她需要买很多东西,但因为她是学生,所以她的预算仍然很有 ...

  7. BZOJ_2097_[Usaco2010 Dec]Exercise 奶牛健美操_二分答案+树形DP

    BZOJ_2097_[Usaco2010 Dec]Exercise 奶牛健美操_二分答案+树形DP Description Farmer John为了保持奶牛们的健康,让可怜的奶牛们不停在牧场之间 的 ...

  8. Luogu P2458 [SDOI2006]保安站岗【树形Dp】

    题目描述 五一来临,某地下超市为了便于疏通和指挥密集的人员和车辆,以免造成超市内的混乱和拥挤,准备临时从外单位调用部分保安来维持交通秩序. 已知整个地下超市的所有通道呈一棵树的形状:某些通道之间可以互 ...

  9. Luogu P2458 [SDOI2006]保安站岗(树形dp)

    P2458 [SDOI2006]保安站岗 题意 题目描述 五一来临,某地下超市为了便于疏通和指挥密集的人员和车辆,以免造成超市内的混乱和拥挤,准备临时从外单位调用部分保安来维持交通秩序. 已知整个地下 ...

随机推荐

  1. 贪心数列构造——cf1157D

    一开始将数列设置为0 1 2 3 4 5 6... 然后从左到右遍历,每位不够就增加即可 #include<bits/stdc++.h> using namespace std; #def ...

  2. 模式识别原理(Pattern Recognition)、概念、系统、特征选择和特征

    §1.1 模式识别的基本概念 一.广义定义 1.模式:一个客观事物的描述,一个可用来仿效的完善的例子. 2.模式识别:按哲学的定义是一个“外部信息到达感觉器官,并被转换成有意义的感觉经验”的过程. 例 ...

  3. ImageMagick convert多张照片JPG转成pdf格式,pdfunite合并PDF文件

      在认识ImageMagick之前,我***的图像浏览软件是KuickShow,截图软件是KSnapShot,这两款软件都是KDE附带的软件,用起来也是蛮方便的.在一次偶然的机会中,我遇到了Imag ...

  4. JDK语法糖之switch字串与枚举支持

    在JDK1.7之前,switch只支持byte,short,char,int,注意1.5之后的自动拆箱,对应的这四种基础类型的封装类也同样支持Byte,Short,Character,Integer, ...

  5. XJOI夏令营501-511NOIP训练14——好朋友

    传送门:QAQQAQ 题意:noip2011就要来了,W校的同学们不仅看重这次比赛,更看重noip2011和谁住在同一个房间.同学之间的关系好坏可以用一个亲密值表示,亲密值越大,两个同学关系越好.小A ...

  6. vue组件间通信用例

    父组件传值给子组件 -- 以封装公用slide组件为例 父组件 <template> <section class="banner"> <slide ...

  7. 关于切片/截取(slice)和random模块的使用(实例:猜单词小游戏)

    切片和random的使用在源码中都有注释(可以直接下载):https://github.com/NoobZeng/GuessWords 1. README.MD 基于Python的猜单词游戏 猜单词小 ...

  8. [PKUSC2018]神仙的游戏

    题目 画一画就会发现一些奇诡的性质 首先如果\(len\)为一个\(\operatorname{border}\),那么必然对于\(\forall i\in [1,len]\),都会有\(s_i=s_ ...

  9. UMP系统架构 Zookeeper

  10. vue中使用动画vue-particles实现背景粒子酷炫效果

    先来看我做的效果 我这个是用的背景色加上这个粒子效果实现的demo 平时我们做项目的话会添加背景图片这些,可能更加好看 看我的实现步骤 cnpm install -g vue-cli vue init ...