JSOI2019 Round2 游记

序言

感觉现在江苏省选有向浙江省选靠拢的趋势啊,题目不仅题型和以前不太一样(比方说今年既没有网络流也没有计算几何),然后分数出来也是两位数一堆,三位数没几个,一些强的选手就这样被莫名其妙地刷下去了。。。感觉不是很好。。。
然而我这个菜鸡又有什么资格评价题目的好坏

Day 0

什么事也不想做,晚上看yy打游戏,后来又和yy看了一部电影(名字我就不说了),过程中hkk一直坐在一边汲取古典文学的精华,与我这种胸无点墨的文盲形成鲜明的对比
本来还打算写写LCT维护parent树的,后来看一轮已经考过字符串了,而且有点困了,就直接爬床上睡了

Day 1

早上定的 6:30 闹铃刚响不到两秒钟就被我瞬间关掉了,正准备再躺一会儿xls突然打电话过来问我们起来了没,然后。。。就只好起床收拾东西去吃饭
吃完饭去考场,等了半天也没进去,一看手表:这tm怎么都已经8:04了啊!
直到8:10才被放进去,于是比赛就延迟了十几分钟
看T1看了5min,内心的心理活动:这 \(O(nm)\) \(60\) 分应该没啥问题(眼高手低典型反面教材)
于是开心地去看T2,看了一会儿:这个好像可以对每个树做 \(k\) 条不相交路径然后再并到一起去,好像挺对的,然后手画了一下图,发现一条链两端有两种接法,但是一个点只有一种接法,但是DP的时候似乎并不能把有几个“点路径”给顺便搞出来(至少我不会),然后就想不到其它能做的方法了
算了算了,看了看T2的暴力分,暴搜有 \(5\) 分,\(10\) 分万一也能搜过去呢?(心怀梦想)。诶诶诶这边好像还有一个 \(5\) 分的完全图诶,全排列数搞一下就行了
嗯不错现在T2有了15分左右,然后T1 60分(。。。),再看看T3怎么样
一眼上去:这tm不会是LCT维护parent树吧(然而我并没有注意到数据范围是 \(3e6\)),早知道昨天写一下了。看了一会儿感觉又不像,这才放下心来,然后秒出 \(30\) 分倍增哈希比较字典序大小的 \(O(n^2\log n)\) 垃圾做法(不会最小表示),然后大样例没过。。。数组开小了。。。然后又造了组字符全一样的。。。又没过。。。倍增跳的时候越界了。。。改过后就没再管了
开始写T2,写DFS写着写着就不会了(?),然后直接枚举全排列(没有梦想了),只有 \(10\) 分了。。。
离比赛结束还有大概两个多小时,开始写T1 \(60\) 分(事实证明我实际上是写不出这 \(60\) 分的)
正如上面所说,写着写着就假了,然后 \(30\) 分也在比赛结束前 \(30\) 分钟弃疗了,此时带着已经一片浆糊的脑袋看 \(10\) 分部分分,意识模糊地写啊写。。。写到比赛结束都不知道自己在写些什么,最后又把之前写假掉的代码撂了上去,只过了小样例,大样例凉透透
然后期望得分 \(0+10+30=40\) ,大家期望得分都比我高。。。
然后成绩出来就变成了 \(10+10+30=50\) ,似乎没挂2333,但又有什么用呢,已经掉到那么低的排名了
至此,高一赛季正式结束,回去准备期末考试了(不过晚上有时间还会来机房qwq)
emmmm或许过一阵子会来补个无聊的高一赛季总结

转载于:https://www.cnblogs.com/ForwardFuture/p/10776449.html

根据引用[1],dp[u][j]表示在u子树中选取恰好j个人时能获得的最大价值。而根据引用,该问题的时间复杂度为O(log2​104×nm)。 对于洛谷P2143 [JSOI2010] 巨额奖金问题,我们可以使用动态规划来解决。具体步骤如下: 1. 首先,我们需要构建一棵树来表示员工之间的关系。树的根节点表示公司的总经理,其他节点表示员工。每个节点都有一个权值,表示该员工的奖金金额。 2. 接下来,我们可以使用动态规划来计算每个节点的dp值。对于每个节点u,我们可以考虑两种情况: - 如果选择节点u,则dp[u][j] = dp[v][j-1] + value[u],其中v是u的子节点,value[u]表示节点u的奖金金额。 - 如果不选择节点u,则dp[u][j] = max(dp[v][j]),其中v是u的子节点。 3. 最后,我们可以通过遍历树的所有节点,计算出dp[u][j]的最大值,即为所求的巨额奖金。 下面是一个示例代码,演示了如何使用动态规划来解决洛谷P2143 [JSOI2010] 巨额奖金问题: ```python # 构建树的数据结构 class Node: def __init__(self, value): self.value = value self.children = [] # 动态规划求解最大奖金 def max_bonus(root, j): dp = [[0] * (j+1) for _ in range(len(root)+1)] def dfs(node): if not node: return for child in node.children: dfs(child) for k in range(j, 0, -1): dp[node.value][k] = max(dp[node.value][k], dp[node.value][k-1] + node.value) for child in node.children: for k in range(j, 0, -1): for l in range(k-1, -1, -1): dp[node.value][k] = max(dp[node.value][k], dp[node.value][k-l-1] + dp[child.value][l]) dfs(root) return dp[root.value][j] # 构建树 root = Node(1) root.children.append(Node(2)) root.children.append(Node(3)) root.children[0].children.append(Node(4)) root.children[0].children.append(Node(5)) root.children[1].children.append(Node(6)) # 求解最大奖金 j = 3 max_bonus_value = max_bonus(root, j) print("最大奖金为:", max_bonus_value) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值