首页 > 其他分享 >[国家集训队] Tree I

[国家集训队] Tree I

时间:2024-05-22 18:07:21浏览次数:25  
标签:题目 Tree 权值 物品 限制 最优 kx 国家集训队

借助这道题目把wqs二分讲明白

考虑如下一个问题:

现在一共有若干个物品,物品被分成两组,现在从中选出若干个物品,但是题目会给出某种限制(也就是在这种限制条件下,物品的选择不是随意的,所有选择集合中,只有一些集合符合题目给出的限制,这样的集合才可以被选择),这种限制只跟物品本身有关而跟其权值无关(i.e. 对一个相同的物品选择集合,其中的物品权值无论如何变化,这个集合的合法性都不改变),而且必须从第一类物品中选出\(p\)个,问如何选择最优

我们设\(g(x)\)表示从第一类物品选出\(x\)个且满足题目限制的最优答案,如果说\(g(x)\)是一个凹凸函数,那么就可以利用wqs二分

比如\(g\)长成下面这个样子

那么如果题目给出的\(p=9\),那么答案就是\(g(9)=5\)

显然我们是不能求出\(g(x)\)的(否则可以直接输出了),我们要想办法把\(g\)搞出来

假设现在有一条直线,斜率为\(k\),令其通过函数上的每一个点(注意函数是离散的),则有

通过\((x_0,g(x_0))\)的直线方程就是\(y-g(x_0)=k(x-x_0)\)

我们给第一类物品的权值都减去\(k\),然后不管\(p\)了,在题目的限制条件下跑出来一个值\(res\),那么\(res\)是什么?

\(res\)其实就是上面画的所有直线的截距的最大值

为什么?我们将直线写成\(y-kx=g(x_0)-kx_0\),注意现在\(k\)是已知量。在最初的情况下,假设我们对每个\(x_0\)都跑出来了一个最优解\(g(x_0)\),而在减\(k\)的情况下,每个\(x_0\)的最优解就是\(g(x_0)-kx_0\)(因为权值的变化不会影响限制)。由于现在我们不管\(p\)了,只在题目的限制条件下跑出来了一个最优解,那么就是我们遍历了所有\(x_0\)取最优解的最优解,也就是\(max(g(x_0)-kx_0)\)

标签:题目,Tree,权值,物品,限制,最优,kx,国家集训队
From: https://www.cnblogs.com/dingxingdi/p/18206841

相关文章

  • DataGridView treeview控件入门
    隐藏treeview相关联的线连接ShowLines设置为false设置行高:itemHeight设置在窗体的位置:Dock设置是否随窗体大小改变而改变:Anchor设置被选中后,是否占满整行:FullRowSelect被点击后的事件:AfterSelectprivatevoidtreeView_AfterSelec......
  • pstree
    pstree以树状图的方式展现进程之间的派生关系补充说明pstree命令以树状图的方式展现进程之间的派生关系,显示效果比较直观。linux系统没有pstree命令需要安装psmisc安装包[root@web-8/my_shell]#yuminstallpsmisc-y语法pstree(选项)选项-a:显示每个程序的完整指令,包......
  • LLM-文心一言:B+Tree 和 B-Tree
    B+Tree和B-Tree(也被称为B树)都是常见的数据结构,它们在数据库、文件系统和缓存系统中有着广泛的应用。以下是它们之间的主要区别和特性:定义和特性:B-Tree:B-Tree是一种平衡的多叉树,适用于外查找多路搜索树。这种数据结构能够保证数据节点查找、顺序访问、插入、删除的动作,其平均时间......
  • 【pywinauto】TreeViewWrapper 选择不了子元素?
    【日期】2024/5/21【问题】1、TreeViewWrapper选择不了子元素?【分析】item=tree_obj.get_item(path)item.select()select():报错,pywinauto.uia_defines.NoPatternInterfaceError无法解决click():报无对于的函数click_input():模拟鼠标移动对应控件后,再点击,缺点:如果......
  • CF1085D Minimum Diameter Tree 题解
    CF1085DMinimumDiameterTree题解比较水的一道绿题观察样例可以发现,边权都平分在叶子节点唯一的一条连边上,由此猜到联想到可以把贪心地将边权全部平均分配到这些边上,这样写出来就能AC了。如何证明先来一张图方便理解:利用反证法:假设按上述做法分配边权后可以至少修改一次......
  • MFC创建树状导览 Tree Control
    CTreeCtrl*pTree=(CTreeCtrl*)GetDlgItem(IDC_TREE1);//设置图片列表//pTree->SetImageList(&m_imageList,TVSIL_NORMAL);//创建待插入的TV_INSERTSTRUCT结构TV_INSERTSTRUCTtvinsert;tvinsert.hParent=NULL; //无父结点tvinsert.hInsertAfter=TVI_LAST; //......
  • 从启发式合并到Dsu on Tree
    从启发式合并到DsuonTree传统启发式合并[HNOI2009]梦幻布丁题目描述\(n\)个布丁摆成一行,进行\(m\)次操作。每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色。例如,颜色分别为\(1,2,2,1\)的四个布丁一共有\(3\)段颜色.输入格式第一行是两......
  • B. Omkar and Heavenly Tree
    原题链接题解真的bt啊由于m没有限制所有测试用例的总和,所以m可以近似看为1e9,也就是说,除了输入以外,不能有任何对m的处理(常数乘上1e9)考虑菊花图,任意两点之间最多只有一个陌生点,而且\(m\ltn\)所以找出那个没有出现过的中间点,作为菊花图的中心md!!构造题!!code#include<bits/std......
  • Tree
    联合权值显然可以枚举中间点,然后做完了。CodeCowPoliticsG显然的,对于每种颜色,点对中一定包含深度最大的点。枚举另外一个点即可。CodePassablePaths显然我们需要选择深度最深的点和距离该点最远的点,判断其他点是否在它们的路径上即可。CodeAHOI2008聚会由题意可得......
  • Game on Tree
    原题链接题解easy.ver::只能朝一个方向走,还剩奇数个格子时先手获胜medium.ver:令\(u_i\)为根节点,这样就只能朝子节点的方向走,设\(dp[now]\)为当以now为根的树,且now节点已经有一颗棋(其子节点均还没有)时,先手必胜1还是必败0,状态转移方程:\(dp[now]|=(1-dp[next])\)hard.ver:......