正题

题目链接:https://www.luogu.com.cn/problem/AT4120


题目大意

给出\(n\)个物品和一个容量\(m\),第\(i\)个物品体积为\(c_i\)。除了第一个物品每个物品还有一个\(p_i(p_i<i)\)表示如果\(p_i\)个物品选择了\(x\)个,第\(i\)个物品选择了\(y\)个要求满足\(x\leq y\leq x+d\)。

\(1\leq n\leq 50,1\leq m,c_i\leq 10^9,0\leq d\leq 10^9,1\leq p<i\)


解题思路

一个简单的转换,变成一棵树之后选择就变为了一次必须选择一个子树。除了点\(1\)外其他最多就只能选择\(d\)次。

就变成了一个多重背包,但是容量和体积很大,考虑贪心。因为价值都比较小,对于足够大的情况性价比贪心是对的,所以我们可以考虑先把小的直接做背包,大的贪心选。

背包时每个物品最多选\(min\{n,d\}\)次,设\(f_i\)表示价值为\(i\)时的最小体积,然后枚举一个背包权值,剩下的贪心就好了。二进制分组或者单调队列优化多重背包都能过

时间复杂度\(O(n^4\log n)\)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=51;
struct node{
ll w,v,id;
}a[N];
ll n,m,d,p[N],f[N*N*N],ans;
bool cmp(node x,node y)
{return x.v*y.w>y.v*x.w;}
signed main()
{
scanf("%lld%lld%lld",&n,&m,&d);
scanf("%lld",&a[1].w);a[1].v=1;a[1].id=1;
for(ll i=2;i<=n;i++)
scanf("%lld%lld",&a[i].w,&p[i]),a[i].v=1;
for(ll i=n;i>1;i--)
a[p[i]].w+=a[i].w,a[p[i]].v+=a[i].v,a[i].id=i;
ll mx=n*n*n;
memset(f,0x3f,sizeof(f));f[0]=0;
for(ll i=1;i<=n;i++){
ll x=min(n,d);
for(ll j=1;j<=x;j<<=1){
ll w=a[i].w*j,v=a[i].v*j;
for(ll k=mx;k>=v;k--)
f[k]=min(f[k],f[k-v]+w);
x-=j;
}
if(!x)continue;
ll w=a[i].w*x,v=a[i].v*x;
for(ll k=mx;k>=v;k--)
f[k]=min(f[k],f[k-v]+w);
}
sort(a+1,a+1+n,cmp);
for(ll p=0;p<=mx;p++){
if(f[p]>m)break;
ll v=p,w=f[p],i=1;
for(i=1;i<n;i++){
if(a[i].id==1)break;
ll x=min(d-min(n,d),(m-w)/a[i].w);
w+=x*a[i].w;v+=x*a[i].v;
}
ll x=(m-w)/a[i].w;
w+=x*a[i].w;v+=x*a[i].v;
ans=max(ans,v);
}
printf("%lld\n",ans);
return 0;
}

AT4120-[ARC096D]Sweet Alchemy【贪心,背包】的更多相关文章

  1. 【bzoj4922】[Lydsy六月月赛]Karp-de-Chant Number 贪心+背包dp

    题目描述 给出 $n$ 个括号序列,从中选出任意个并将它们按照任意顺序连接起来,求以这种方式得到匹配括号序列的最大长度. 输入 第一行包含一个正整数n(1<=n<=300),表示括号序列的 ...

  2. Atcoder Regular Contest 096 D - Sweet Alchemy(贪心+多重背包)

    洛谷题面传送门 & Atcoder 题面传送门 由于再过 1h 就是 NOI 笔试了所以题解写得会略有点简略. 考虑差分,记 \(b_i=c_i-c_{fa_i}\),那么根据题意有 \(b_ ...

  3. HDU3466Proud Merchants(贪心&背包)

    http://acm.hdu.edu.cn/showproblem.php?pid=3466 题目大意是说n个物品每个物品的花费是p,但是如果你现在的钱少于q就买不了这个物品,每个物品的价值是v,求有 ...

  4. Installing Apps Kattis - installingapps (贪心 + 背包)

    Installing Apps Kattis - installingapps Sandra recently bought her first smart phone. One of her fri ...

  5. *AtCoder Regular Contest 096F - Sweet Alchemy

    $n \leq 50$的树,每个点有权值,现要选点(可多次选一个点)使点数尽量多,如下限制:选的总权值不超过$C \leq 1e9$:$c_i$表示$i$选的次数,$p_i$表示$i$的父亲,那么$c ...

  6. HDU 5303 Delicious Apples(贪心 + 背包 2015多校啊)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5303 Problem Description There are n apple trees plan ...

  7. bzoj4922 [Lydsy1706月赛]Karp-de-Chant Number 贪心+背包

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4922 题解 记录每一个串的没有匹配的右括号 \()\) 的数量为 \(a_i\),为匹配的左括 ...

  8. [atARC096F]Sweet Alchemy

    给定一棵有根树,记$f_{i}$表示$i$的父亲,每一个点有一个代价$c_{i}$ 给定常数$D$和$X$,再给每个点赋一个权值$v_{i}$($v_{i}\ge 0$),满足以下条件下最大化$\su ...

  9. HDU 4003 [树][贪心][背包]

    /* 大连热身A题 不要低头,不要放弃,不要气馁,不要慌张 题意: 给一棵树,每条边上有权值.给一个起点,放置n个机器人,要求使得任意一个节点至少被一个机器人经过. 每个机器人经过某条边时的代价为这条 ...

随机推荐

  1. Vue实现在前端导出Excel 方法1

    也可以去看我的方法2:https://www.cnblogs.com/yingyigongzi/p/10915403.html ------------------------------------ ...

  2. 面向对象之编写驱动程序--中断(linux系统、s3c6410开发板)

    /*------------------------- *先申明下,本人是个菜鸟,刚开始接触驱动程序编写,交代下开发环境(主机系统redhat6.3,开发板ARM-s3c6410) 以watchdog ...

  3. 了解Flask

    了解Flask 什么是Flask Flask 是一个微框架(Micro framework),所谓微框架,它就是很轻量级的,作者划分出了Flask应该负责什么(请求路由.处理请求.返回响应).不应该负 ...

  4. 使用spring向service里面注入dao不成功。

    因为原来的程序没有使用spring.后来加spring的时候action有个地方的new没有改!!! new了个新的实现层 不是spring管理的对象.

  5. 详解 Apache SkyWalking 跨进程传播协议

    简介 SkyWalking 跨进程传播协议是用于上下文的传播,本文介绍的版本是3.0,也被称为为sw8协议. Header项 Header应该是上下文传播的最低要求. Header名称:sw8. He ...

  6. grpc服务发现与负载均衡

    前言 在后台服务开发中,高可用性是构建中核心且重要的一环.服务发现(Service discovery)和负载均衡(Load Balance)一直都是我关注的话题.今天来谈一下我在实际中是如何理解及落 ...

  7. 电子设备的使用方法-第5版(佳明智能腕表小米手机联想轻薄笔记本群晖存储)我的腾讯QQ电子邮箱地址是 595076941@qq.com - 2021年9月5日

      电子设备的使用方法-第5版   (佳明智能腕表小米手机联想轻薄笔记本群晖存储) 2021年9月5日 我的腾讯QQ电子邮箱地址是  595076941@qq.com 前言 大家好,我叫徐晓亮,今天我 ...

  8. 从零开始实现简单 RPC 框架 9:网络通信之心跳与重连机制

    一.心跳 什么是心跳 在 TPC 中,客户端和服务端建立连接之后,需要定期发送数据包,来通知对方自己还在线,以确保 TPC 连接的有效性.如果一个连接长时间没有心跳,需要及时断开,否则服务端会维护很多 ...

  9. 代码保留格式(高亮)复制到Word(转载)

    将代码保持高亮复制粘贴到word上,一些方法如下: 方法一:借助网站http://www.planetb.ca/syntax-highlight-word/(代码有编号,整体排版精美令人舒适,但语言有 ...

  10. java 线程基础篇,看这一篇就够了。

    前言: Java三大基础框架:集合,线程,io基本是开发必用,面试必问的核心内容,今天我们讲讲线程. 想要把线程理解透彻,这需要具备很多方面的知识和经验,本篇主要是关于线程基础包括线程状态和常用方法. ...