首页 > 其他分享 >重庆八中周赛 13

重庆八中周赛 13

时间:2024-03-04 15:35:31浏览次数:27  
标签:周赛 13 背包 传送门 text 八中 枚举 dp dis


\[\large \text{Round 11 : Cqbz Weekly Round 13} \]

一言:
男人从小的时候就是无药可救的。
——秋之回忆

炸裂的一场,主将中的最低分,组长中的倒二。

忏悔啊!

\(\text{D : card}\)

写这道题没什么别的意义所在,只是为了记录一下回退背包的知识点。

这个题目可以非常容易的转化为在所有除去 \(a_i\) 的数所构成的集合中,与 \([k-a_i,k-1]\) 没有交集。

显然,我们可以暴力枚举 \(i\),然后打一个 \(nk\) 的 0/1 背包。

但是这样的复杂度是 \(n^2k\) 的,所以考虑优化。

我们发现,如果我们求出了 \(1-n\) 所有 \(a_i\) 的 0/1 背包,我们对于枚举到的每一个 \(a_i\),实际上就是将 \(a_i\) 从这个背包中删除。

由于在 0/1 背包中,你的 \(a_i\) 的枚举顺序是无关大雅的,所以想成可以把 \(a_i\) 放在最后一个转移,那么就有 \(dp[j]+=dp[j-a[i]]\),并且 \(j\) 是倒叙枚举。

那么要把 \(a_i\) 删掉,那就考虑正序枚举,然后 \(dp[j]-=dp[j-a[i]]\)。

那么这道题实际上就解决了。

(考场上打的 \(nk\log n\) 的神奇二分做法,被卡到90分。)

\(\text{Submission}\)

\(\text{F : open}\)

算是这几次周考代码最少的 T6,但感觉是思维难度最高的。

首先你需要想到一个非常重要的转化。即我们可以求出任意两个传送门之间互相到达的最短距离,然后题目就转化为了求传送门之间的最小生成树。

于是,你得到了重要的前 \(60pts\)。

那么如何优化呢?

我们考虑一个构造生成树的过程,回顾一下 \(\text{kruskal}\) 算法。

对于每次操作,实际上我们都是找到两个还没有联通的传送门中,距离最小的连在一起。

那么考虑将任意一条边拆解为图中最原始的边。

然后对于途中的任意一条边 \((x,y)\),求出 \(x,y\) 分别到距离最近他们的传送门的距离 \(dis_x,dis_y\),那么这条边实际的贡献就是 \(w(x,y)+dis_x+dis_y\)。这一步可以考虑多源最短路。然后根据 \(\text{kruskal}\) 的思想,考虑将任意边按照他们的贡献排序,每次连一条边,就是将他们对应的两个传送门连接在一起,最后输出连的边的贡献和。

至于为什么这样是对的,额俺也不会证,俺也不知道。可以理解为,如果没有选择这条边,那么就必然可以将新选的这条边拆解为另外的边,但他们的贡献更少(或者出现了环之类的东西)。

毕竟重点是猜结论,赛时很难证明的。。

\(\text{Submission}\)

\(\text{What I learned}\)

  • 如果你需要算除开 \(a_i\) 的一些信息,考虑对动态规划进行回退(例如背包,当然有些无法回退)。

  • 如果是 \(n\) 个点,每个点都要用一次,且每个点可以使得另外一个点配合上会产生一个与这两个点信息有关的权值,可以任意配合,考虑生成树。

  • 对于生成树上的边,如果是由很多条基本边合在一起的,可以考虑将他们拆解开。

标签:周赛,13,背包,传送门,text,八中,枚举,dp,dis
From: https://www.cnblogs.com/SFsaltyfish/p/18051893

相关文章

  • 代码随想录 第13天 | ● 239. 滑动窗口最大值 ● 347.前 K 个高频元素 ● 总结
    leetcode:239.滑动窗口最大值-力扣(LeetCode)思路:看了挺长时间才反应过来与暴力算法的区别。当遇到比上一个元素大的值时,将上一个元素剔除,小于时加入队列中,每次等于窗口长度时将顶端也就是最大值存起来classSolution{publicint[]maxSlidingWindow(int[]nums,intk)......
  • 重庆八中周赛 12
    \[\large\text{Round9:CqbzWeeklyRound12}\]一言:雨滴降落的速度是每秒十米,我该用怎么样的速度,才能将你挽留?——言叶之庭感觉这场比赛挺有意思的,除了T3的大模拟被某巨佬拉开了差距,其他的题目感觉完成情况都比较正常吧。\(\text{F:middle}\)这是一道可持久化的好......
  • AtCoder Beginner Contest 313
    \[\large\text{Round2:AtCoderBeginnerContest313(VP)}\]一言:当我拔出第二把剑时,就是为了我所爱之人——刀剑神域这场比赛真的是大败而归,只A了\(A,B,C,E\)。。。虽然但是,\(F,G\)确实不可做,但是\(D\)题还是有点可惜了。\(\text{D:OddorEven}\)感觉考场......
  • 重庆八中周赛 10
    \[\large\text{Round4:cqbzWeeklyRound10}\]一言:无论你在哪里,就算我看不见你,我也会一直注视着你。——妖精的尾巴\(\text{D:cloud}\)如果把买入和卖出分开处理显然会有一些繁琐,所以我们考虑把他们合在一起,那么买入的利润就是价格的相反数,而卖出就会失去核心。我......
  • 13. 对象池
    创建对象池我们后面会创建出很多的卡牌,如果每张卡牌都需要Instantiate和Destroy的话,就会非常消耗性能。因此我们使用对象池来管理这些对象,使它们的分配和开销减少具体代码如下usingSystem.Diagnostics.Tracing;usingUnityEngine;usingUnityEngine.Pool;publicclass......
  • 牛客周赛 Round 35
    A.小红的字符串切割思路:拿到了一个长度为偶数的字符串,请你将其切割成长度相等的两部分并输出Code:#include<bits/stdc++.h>usingnamespacestd;intmain(){strings;cin>>s;for(inti=0;i<s.size()/2;i++){cout<<s[i];}c......
  • python接口自动化系列(13):windows下allure报告展示
     本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/18033074实现目标上一步获取到测试报告的数据了,这里我们通过命令生成报告并在浏览器中查看报告。 allure-commandline在windows下安装、配置参考:https://www.cnblogs.com/uncleyong/p/16726826.html windows......
  • 牛客周赛 Round 35
    牛客周赛Round35小红的字符串切割代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;usingpii=pair<ll,ll>;typedefdoubledb;#definefifirst#definesesecondusingi128=__int128_t;usingpiii=pair<ll,pair<ll,ll>......
  • CF1312C Adding Powers 题解
    题意:对于一个初始全\(0\)的序列,问是否能够进行若干次操作(第\(i\)次操作为对序列中任意一个元素增加\(k^i\)),使得此序列变为目标数组\(a\)。首先,我们令需要进行操作的序列为\(b\)。我们知道,如果能通过若干次操作将\(b\)变为\(a\),则有以下三种情形:\(a\)中的元素全......
  • P8598 [蓝桥杯 2013 省 AB] 错误票据 题解
    思路考虑将\(id\)从小到大排序,然后从\(2\)下标开始扫描一遍\(id\)数组,若当前的\(id_i-id_{i-1}>1\),则说明当前\(id\)存在断号,输出\(id_i-1\);若当前的\(id_i=id_{i-1}\),则说明当前\(id\)存在重号,输出\(id_i\)。注意断号与重号需要分开计算。#include<b......