上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 34 下一页
摘要: 题意:一块n×m的蛋糕上有若干个樱桃,要求切割若干次以后,每块蛋糕上有且仅有1个樱桃。求最小的切割长度。分析:d(u, d, l, r)表示切割矩形(u, d, l, r)所需要的最小切割长度。我们可以枚举第一刀切割的方向和位置,在切割之前还要判断一下这一刀是否合法,防止出现切出来的某一个小块蛋糕上... 阅读全文
posted @ 2015-09-02 09:21 AOQNRMGYXLMV 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 假设在当前状态我们第i堆糖果分别取了cnt[i]个,那么篮子里以及口袋里糖果的个数都是可以确定下来的。所以就可以使用记忆化搜索。 1 #include 2 #include 3 #include 4 using namespace std; 5 6 const int maxn = 45; ... 阅读全文
posted @ 2015-09-01 23:35 AOQNRMGYXLMV 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 题意:根据离散数学的内容知道,一个二元关系是一个二元有序组的集合。然后有一些特殊的二元关系,比如等价关系,满足三个条件:自反性,任意的x,都有二元关系对称性,如果有则有传递性,如果有和,则有现在要统计满足后两条,但不满足第一个条件的二元关系的个数。题中的证明是对的:If , then (accor... 阅读全文
posted @ 2015-09-01 19:17 AOQNRMGYXLMV 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 题意:给出一棵树,删除一条边再添加一条边,求新树的最短的直径。分析:因为n比较小(n ≤ 2500),所以可以枚举删除的边,分裂成两棵树,然后有这么一个结论:合并两棵树后得到的新树的最短直径为:这两棵树一定是这样合并的,分别取两棵树直径的中点,然后将其连接起来。这样新树的直径才是最短的。所以在找直径... 阅读全文
posted @ 2015-09-01 09:38 AOQNRMGYXLMV 阅读(453) 评论(0) 推荐(0) 编辑
摘要: 首先想一下特殊情况,如果只有一个气球,我们要确定高度只能从下往上一层一层地测试,因为如果气球一旦爆了,便无法测出气球的硬度。如果气球有无数个,那么就可以用二分的方法来确定。一般地,用d(i, j)表示用i个气球实验j次所能确定的楼层的最大高度。我们假设第一个气球从第k层扔下,如果气球爆了,那么剩下的... 阅读全文
posted @ 2015-08-31 21:20 AOQNRMGYXLMV 阅读(455) 评论(0) 推荐(0) 编辑
摘要: 题意:有一颗树,每条边是好边或者是坏边,对于一个节点为x,如果任意一个点到x的路径上的坏边不超过1条,那么这样的方案是合法的,求所有合法的方案数。对于n个所有可能的x,输出n个答案。分析:题解 1 #include 2 #include 3 #include 4 #include 5 #in... 阅读全文
posted @ 2015-08-24 16:59 AOQNRMGYXLMV 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 题意:给出一个n行m列的字符矩阵,从左上角走到右下角,每次只能往右或者往下走,求一共有多少种走法能得到回文串。分析:可以从两头开始考虑,每次只走一样字符的格子,这样得到的两个字符串拼起来之后就是一个回文串。设d(step, x1, y2, x2, y2)表示从左上角(1, 1)z往右下走step个格... 阅读全文
posted @ 2015-08-24 09:27 AOQNRMGYXLMV 阅读(316) 评论(0) 推荐(0) 编辑
摘要: 题意:有n个数字,n-1个运算符,每个运算符的顺序可以任意,因此一共有 (n - 1)! 种运算顺序,得到 (n - 1)! 个运算结果,然后求这些运算结果之和 MOD 1e9+7.分析:类比最优矩阵链乘,枚举区间[l, r]中最后一个运算符的位置k。如果运算符为乘法的话,那么根据乘法分配率这个乘法... 阅读全文
posted @ 2015-08-20 00:45 AOQNRMGYXLMV 阅读(244) 评论(0) 推荐(0) 编辑
摘要: 题意:有一个n * m的数字矩阵,每个格子放着一个非负整数,从左上角走到右下角,每个格子最多走一次,问所经过的格子的最大权值之和是多少,并且输出一个路径。分析:如果n和m有一个是偶数的话,那么只要按照蛇形的走法一直走下去即可。比如n为奇数的时候就这样,左右左右地蛇形走。同样的,如果m为奇数的时候,也... 阅读全文
posted @ 2015-08-19 22:12 AOQNRMGYXLMV 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 题意:有m个1~n的映射,而且对于任意的 i 满足 f1(f2(...fm(i))) = i其中有些映射是知道的,有些是不知道的,问一共有多少种置换的组合。分析:首先这些置换一定是1~n的一个置换(也就是1~n的一个排列)才行,因为如果某两个数映射到同一个数的话,那么这个数往后无论怎么映射,这两个数... 阅读全文
posted @ 2015-08-19 20:08 AOQNRMGYXLMV 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 本着只贴代码不写分析的题解是在耍流氓的原则,还是决定写点分析。思路很清晰,参考的官方题解,一下文字仅对题解做一个简要翻译。题意:有1~n这n个数,每个数用两次。构成一个长为2n的序列,而且要求序列满足先递增后递减(都是非严格的递增递减)。再给出k个约束,每个约束形如1 >= 3这种,表示序列的第一个... 阅读全文
posted @ 2015-08-18 10:41 AOQNRMGYXLMV 阅读(292) 评论(0) 推荐(0) 编辑
摘要: 题意:每次操作新加两个叶子节点,每次操作完以后询问树的直径。维护树的直径的两个端点U,V,每次计算一下新加进来的叶子节点到U,V两点的距离,如果有更长的就更新。因为根据树的直径的求法,若出现新的直径,一定是到U或者到V距离最远。 1 #include 2 #include 3 #include ... 阅读全文
posted @ 2015-08-17 12:39 AOQNRMGYXLMV 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 求出一个连续子序列,这个子序列由三部分ABC构成,其中AB是回文串,A和C相同,也就是BC也是回文串。求这样一个最长的子序列。Manacher算法是在所有两个相邻数字之间插入一个特殊的数字,比如-1,Manacher算法跑完之后,就计算出每个数字为中心的回文子序列的最大长度由题意可以知道,AB和BC... 阅读全文
posted @ 2015-08-15 16:51 AOQNRMGYXLMV 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 参考九野巨巨的博客。查询一个子树内的信息,可以通过DFS序转成线形的,从而用数据结构来维护。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #define MP make_pair 7 #define FI ... 阅读全文
posted @ 2015-08-15 10:40 AOQNRMGYXLMV 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 给出一棵树,找出两条不相交即没有公共点的路径,使得两个路径的长度的乘积最大。思路:枚举树中的边,将该边去掉,分成两棵树,分别求出这两棵树的直径,乘起来维护一个最大值即可。 1 #include 2 #include 3 #include 4 #include 5 using namespac... 阅读全文
posted @ 2015-08-14 20:10 AOQNRMGYXLMV 阅读(250) 评论(0) 推荐(0) 编辑
摘要: 这题的解法有点神啊。。参考题解 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 7 typedef long long LL; 8 const LL INF = (1LL G[maxn];14 15... 阅读全文
posted @ 2015-08-14 17:11 AOQNRMGYXLMV 阅读(326) 评论(0) 推荐(0) 编辑
摘要: 官方题解:可以用求概率的思想来解决这个问题。令以i号节点为根的子树为第i棵子树,设这颗子树恰好有sz[i]个点。那么第i个点是第i棵子树最大值的概率为1/sz[i],不是最大值的概率为(sz[i]-1)/sz[i]。现在可以求解恰好有k个最大值的概率。令dp[i][j]表示考虑编号从1到i的点,其中... 阅读全文
posted @ 2015-08-14 15:22 AOQNRMGYXLMV 阅读(246) 评论(0) 推荐(0) 编辑
摘要: 任意一棵子树上节点的编号连续,每个节点的所有二字节点连续,求编号方案的总数。稍微分析一下可知每个节点的非叶子节点个数不能多于两个,否则这个子树无解,从而整棵树都无解。每棵子树将所有节点按照编号从小到大排序,根节点要么在最左端,要么在最右端,而且这两种情况相等。(后面会有具体分析)设size(u)表示... 阅读全文
posted @ 2015-08-14 14:28 AOQNRMGYXLMV 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 从下往上DP,d(i, j, k)表示第(i, j)个格子走到底和为k的路径条数。至于字典序最小,DP的时候记录一下路径就好。 1 #include 2 #include 3 #include 4 using namespace std; 5 6 int n, sum; 7 int a[50... 阅读全文
posted @ 2015-08-13 10:16 AOQNRMGYXLMV 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 题意:给出一个有向图,问最少添加几条有向边使得原图强连通。解法:求出SCC后缩点,统计一下出度为0的点和入度为0的点,二者取最大值就是答案。还有个特殊情况就是本身就是强连通的话,答案就是0. 1 #include 2 #include 3 #include 4 #include 5 #inc... 阅读全文
posted @ 2015-08-12 11:20 AOQNRMGYXLMV 阅读(241) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 34 下一页