Karen and Supermarket

感觉就是很普通的树形dp。

dp[ i ][ 0 ][ u ]表示在 i 这棵子树中选择 u 个且 i 不用优惠券的最小花费。

dp[ i ][ 1 ][ u ]表示在 i 这棵子树中选择 u 个且 i 用优惠券的最小花费。

注意这个转移总的合起来是O(n ^ 2)的。

#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define PLL pair<LL, LL>
#define PLI pair<LL, int>
#define PII pair<int, int>
#define SZ(x) ((int)x.size())
#define ull unsigned long long
using namespace std; const int N = + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + ;
const double eps = 1e-; int n, b, d[N], c[N], fa[N];
vector<int> G[N]; int dp[N][][N];
int tmp[N][][N];
int sum[N]; void dfs(int u) {
sum[u] = ;
memset(dp[u], inf, sizeof(dp[u]));
dp[u][][] = ;
dp[u][][] = c[u];
dp[u][][] = c[u] - d[u];
for(auto& v : G[u]) {
dfs(v);
memset(tmp[u], INF, sizeof(tmp[u]));
for(int i = ; i <= sum[u]; i++) {
for(int j = ; j <= sum[v]; j++) {
tmp[u][][i + j] = min(tmp[u][][i + j], dp[u][][i] + dp[v][][j]);
tmp[u][][i + j] = min(tmp[u][][i + j], dp[u][][i] + dp[v][][j]);
tmp[u][][i + j] = min(tmp[u][][i + j], dp[u][][i] + dp[v][][j]);
}
}
sum[u] += sum[v];
memcpy(dp[u], tmp[u], sizeof(dp[u]));
}
} int main() {
scanf("%d%d", &n, &b);
for(int i = ; i <= n; i++) {
scanf("%d%d", &c[i], &d[i]);
if(i > ) {
scanf("%d", &fa[i]);
G[fa[i]].push_back(i);
}
}
dfs();
for(int i = n; i >= ; i--) {
if(dp[][][i] <= b || dp[][][i] <= b) {
printf("%d\n", i);
return ;
}
}
return ;
} /*
*/

Codeforces 815C Karen and Supermarket 树形dp的更多相关文章

  1. Codeforces Round #419 (Div. 1) C. Karen and Supermarket 树形DP

    C. Karen and Supermarket     On the way home, Karen decided to stop by the supermarket to buy some g ...

  2. CF815C Karen and Supermarket [树形DP]

    题目传送门 Karen and Supermarket On the way home, Karen decided to stop by the supermarket to buy some gr ...

  3. 816E. Karen and Supermarket 树形DP

    LINK 题意:给出n个商品,除第一个商品外,所有商品可以选择使用优惠券,但要求其前驱商品已被购买,问消费k以下能买几个不同的商品 思路:题意很明显就是树形DP.对于一个商品有三种选择,买且使用优惠券 ...

  4. Codeforces 815C. Karen and Supermarket【树形DP】

    LINK 思路 首先发现依赖关系是一个树形的结构 然后因为直接算花多少钱来统计贡献不是很好 因为数组开不下 那就可以算一个子树里面选多少个的最小代价就可以了 注意统计贡献的时候用优惠券的答案只能在1号 ...

  5. codeforces 815C Karen and Supermarket

    On the way home, Karen decided to stop by the supermarket to buy some groceries. She needs to buy a ...

  6. CodeForces 816E Karen and Supermarket ——(树形DP)

    题意:有n件商品,每件商品都最多只能被买一次,且有一个原价和一个如果使用优惠券以后可以减少的价格,同时,除了第一件商品以外每件商品都有一个xi属性,表示买这个商品时如果要使用优惠券必须已经使用了xi的 ...

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

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

  8. codeforces 161D Distance in Tree 树形dp

    题目链接: http://codeforces.com/contest/161/problem/D D. Distance in Tree time limit per test 3 secondsm ...

  9. codeforces 337D Book of Evil (树形dp)

    题目链接:http://codeforces.com/problemset/problem/337/D 参考博客:http://www.cnblogs.com/chanme/p/3265913 题目大 ...

随机推荐

  1. centos 重启日志服务

    因为/var/log/message日志太多了,遂手贱删掉了这个文件,新建messages,发现没有日志写入 正确清空日志的方法 cat /dev/null > /var/log/boot.lo ...

  2. angularjs指令中scope参数 true、false、{} 的区别详解

    scope 有三个参数 true.false.{} scope 默认是 false,当 scope设置为true时,会从父作用域继承并创建一个新的作用域对象, 按照true .false的反向思维,我 ...

  3. C# 批量修改文件名

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  4. SpringBoot整合定时任务和异步任务处理 3节课

    1.SpringBoot定时任务schedule讲解   定时任务应用场景: 简介:讲解什么是定时任务和常见定时任务区别 1.常见定时任务 Java自带的java.util.Timer类        ...

  5. LaTeX 对齐问题

    一.一行文本对齐 \leftline{左对齐} \centerline{居中} \rightline{右对齐} 二.多行文本或段落对齐 左对齐 \begin{flushleft}...\end{flu ...

  6. SpringBoot修改Servlet相关配置

    第一种方式在配置文件中进行修改 server.port=8081 server.servlet.context-path=/springboot server.tomcat.uri-encoding= ...

  7. freeRTOS中文实用教程5--内存管理

    1.前言 不同的嵌入式系统具有不同的内存配置和时间要求.所以单一的内存分配算法只可能适合部分应用程序. FreeRTOS 将内存分配作为可移植层面(相对于基本的内核代码部分而言).这使得不同的应用程序 ...

  8. 为何time_before 起作用【转】

    转自:http://decimal.blog.51cto.com/1484476/410673 Title: jiffies溢出与时间先后比较编制: chinakapok@sina.com日期:200 ...

  9. 如何用enable_shared_from_this 来得到指向自身的shared_ptr 及对enable_shared_from_this 的理解

    在看<Linux多线程服务端编程:使用muduo C++网络库> 的时候,在说到如何防止在将对象的 this 指针作为返回值返回给了调用者时可能会造成的 core dump.需使用 ena ...

  10. 【转】Oracle 11g安装图文攻略

    一.Oracle 下载     注意Oracle分成两个文件,下载完后,将两个文件解压到同一目录下即可. 路径名称中,最好不要出现中文,也不要出现空格等不规则字符. 二.Oracle安装     1. ...