摘要: 代码如下 cpp include using namespace std; const int maxn=1e6+10; inline int read(){ int x=0,f=1;char ch; do{ch=getchar();if(ch==' ')f= 1;}while(!isdigit(c 阅读全文
posted @ 2018-10-29 23:12 shellpicker 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给定 N 个数,求这 N 个数中任选两个数进行异或运算,求最大的异或和是多少。 一个 int 类型的整数,可以看作一个长度为32位的字符串,异或运算不像加法,最大值不一定是由两个较大值得到。 在这里,可以采取一种树上贪心操作,即:将每个整数按照位的顺序从高位插入一棵 trie 树,并且在每 阅读全文
posted @ 2018-10-29 21:33 shellpicker 阅读(400) 评论(0) 推荐(1) 编辑
摘要: 简单来说,这是一道树形结构上的最大流问题。 朴素的解法是可以以每个节点为源点,单独进行一次dp,时间复杂度是$O(n^2)$ 但是在朴素求解的过程中,相当于每次都求解了一次整棵树的信息,会做了不少的重复工作。 对于一棵子树的孩子节点和根节点之间存在着最优解的某些关联,因此可以采用自顶向下的一次 df 阅读全文
posted @ 2018-10-29 16:00 shellpicker 阅读(561) 评论(0) 推荐(0) 编辑
摘要: 题目中所说的每门课都可能有先修课,也可能没有先修课,因此课与课之间的关系构成了一颗森林。 这种树上选择若干物品的最优解问题对应着树形背包问题。 阶段:子树的大小 状态:在当前子树中,选取 i 门课能够获得的最多学分 状态转移方程:$dp[u][t]=max\{\Sigma_{i=1}^pdp[v_i 阅读全文
posted @ 2018-10-29 14:45 shellpicker 阅读(113) 评论(0) 推荐(0) 编辑