洛谷4395气垫车

文章讨论了一个基于递归和树形动态规划的问题,通过计算节点数量来确定给定最大值x下可能的节点总数。实例代码展示了如何在C++中实现,当输入15时,节点数量超过1W,因此确定上界为14,然后转向常规树形动态规划求解方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这一题很显然是需要我们猜一些结论

然后发现无法证明只写1/2

所以我们尝试找填的数的上限

假设最终的数的最大值为x,那么这个节点的周围肯定有1...x-1,一共x-1个节点

对这x-2个节点(除1外),每个节点都可以产生i-1个节点(其中i是节点的权值)

然后以此类推,不难写出一个代码

#include<bits/stdc++.h>
using namespace std;
int calc(int x)
{
	if(x==1) return 1;
	int res=0;
	for(int i=1;i<x;i++)
	res+=calc(i);
	return res+1;
 } 
int main()
{
	printf("%d",calc(x));
    return 0;
}

当输入15时就已经大于1W了

所以上界是14

然后就是普通的树形DP了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值