LINK

题意:给出n个商品,除第一个商品外,所有商品可以选择使用优惠券,但要求其前驱商品已被购买,问消费k以下能买几个不同的商品

思路:题意很明显就是树形DP。对于一个商品有三种选择,买且使用优惠券,买不使用优惠券,不买。当然如果直接暴力进行转移是$O(n^3)$的,但我们可以统计每个结点其子节点的个数sz,sz~0地来遍历,这样就可以将某节点与其父节点进行转移,从而避免了多余无效的转移,优化到$O(n^2)$。dp[k][i][j]代表 k是否不使用优惠券,以i为父节点 购买j个商品的最小花费。

/** @Date    : 2017-07-01 15:38:39
* @FileName: 816E 树形DP.cpp
* @Platform: Windows
* @Author : Lweleth (SoungEarlf@gmail.com)
* @Link : https://github.com/
* @Version : $Id$
*/
#include <bits/stdc++.h>
#define LL long long
#define PII pair
#define MP(x, y) make_pair((x),(y))
#define fi first
#define se second
#define PB(x) push_back((x))
#define MMG(x) memset((x), -1,sizeof(x))
#define MMF(x) memset((x),0,sizeof(x))
#define MMI(x) memset((x), INF, sizeof(x))
using namespace std; const LL INF = 0x3f3f3f3f;
const int N = 1e5+20;
const double eps = 1e-8; LL n, m;
LL c[N], b[N];
LL dp[2][5010][5010];
int sz[5010];
vector edg[5010]; int dfs(int x, int pre)
{
sz[x] = 1;
dp[1][x][0] = 0;
dp[1][x][1] = c[x];//不用优惠券
dp[0][x][1] = c[x] - b[x];//用优惠券
for(auto np:edg[x])
{
if(np == pre)
continue;
dfs(np, x);
for(int i = sz[x]; i >= 0; i--)//
{
for(int j = sz[np]; j >= 0; j--)
{
dp[0][x][i + j] = min(dp[0][x][i + j], dp[0][x][i] + min(dp[1][np][j], dp[0][np][j]));
dp[1][x][i + j] = min(dp[1][x][i + j], dp[1][x][i] + dp[1][np][j]);
}
}
sz[x] += sz[np];
}
}
int main()
{
while(cin >> n >> m)
{
MMF(sz);
MMI(dp);
int t;
scanf("%lld%lld", c + 1, b + 1);
for(int i = 2; i <= n; i++)
{
scanf("%lld%lld%d", c + i, b + i, &t);
edg[t].PB(i);
}
dfs(1, -1);
for(int i = n; i >= 0; i--)
{
LL mi = min(dp[1][1][i], dp[0][1][i]);
if(mi <= m)
{
printf("%d\n", i);
break;
}
}
}
return 0;
}

816E. Karen and Supermarket 树形DP的更多相关文章

  1. Codeforces 815C Karen and Supermarket 树形dp

    Karen and Supermarket 感觉就是很普通的树形dp. dp[ i ][ 0 ][ u ]表示在 i 这棵子树中选择 u 个且 i 不用优惠券的最小花费. dp[ i ][ 1 ][ ...

  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. 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 ...

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

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

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

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

  6. cf 816E Karen and Supermarket

    题目大意 给定\(n\)一颗树,每个点上有一个物品 每个物品有价格\(c[i]\) 有优惠券,能使价格减少\(d[i]\) 但是使用优惠券的前提时购买该物品,且父亲也使用优惠券 给定钱包余额\(lim ...

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

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

  8. codeforces 816 E. Karen and Supermarket(树形dp)

    题目链接:http://codeforces.com/contest/816/problem/E 题意:有n件商品,每件有价格ci,优惠券di,对于i>=2,使用di的条件为:xi的优惠券需要被 ...

  9. E. Karen and Supermarket

    E. Karen and Supermarket time limit per test 2 seconds memory limit per test 512 megabytes input sta ...

随机推荐

  1. Alpha 冲刺8

    队名:日不落战队 安琪(队长) 今天完成的任务 登录的数据post. okhttp学习第二弹. 明天的计划 okhttp学习第三弹. 个人信息界面数据get. 还剩下的任务 个人信息数据get. 遇到 ...

  2. DB2 V9 默认帐户信息和服务启动信息

    1 dasusr1 DB2 管理服务器用户是管理DAS(Database Adminitrator Service).要完全适用db2 cc 必须启动DAS.DB2 管理服务器(DAS)响应来自 DB ...

  3. 0302借软件工程触IT

         没有不想学好的学生,也没有选择计算机软件专业后不想过能进军IT的行业的.就对于自己情况来说,大学选择计算机商业软件专业学习也有一年多时间了,未接触专业知识前IT是一个高大上的向往,在初学C语 ...

  4. 小程序获取 openid 和 session_key

    <?php //获取openid function getopenid(){//获取用户ID //code为前端通过 wx.login() 方式获取 $code = $_GET["co ...

  5. RAD Studio 10.3 Rio (BCB & Dephi) 发布啦

    期盼已久的RAD Studio 10.3 Rio  终于发布了: 下载链接:http://altd.embarcadero.com/download/radstudio/10.3/delphicbui ...

  6. linux下面Zookeeper的单机模式(standalone)

    1.下载 zk下载地址 http://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/ 我用的是http://mirrors.tuna.tsinghua.e ...

  7. 第163天:js面向对象-对象创建方式总结

    面向对象-对象创建方式总结 1. 创建对象的方式,json方式 推荐使用的场合: 作为函数的参数,临时只用一次的场景.比如设置函数原型对象. var obj = {}; //对象有自己的 属性 和 行 ...

  8. BZOJ 1444 有趣的游戏(AC自动机+矩阵快速幂)

    真的是很有趣的游戏... 对每个单词构建好AC自动机后,由于单词都是相同长度的且不同,所以不会出现互相为子串的形式. 那么我们对AC自动机上的节点构建转移矩阵.对于每个单词末尾的节点.该节点的出边仅仅 ...

  9. 【JavaScript】table显示问题

    table有时显示出问题,解决办法如下: 添加<thead></thead>和<tbody></tbody>在table的外面添加<div> ...

  10. p12转pem公钥私钥

    cer格式证书生成p12文件,前面写了有一篇了. 这里是从p12文件导出公钥和私钥 //1.生成1.key文件 openssl pkcs12 -in apple_payment.p12 -nocert ...