1.题目描述:点击打开链接
2.解题思路:本题要求找到合适的一组a,b,使得按照递推公式能输出正确的x2,x4...可以枚举a值,通过列写方程得到b的值,但这里有一个问题,这里是一个同余方程,等号的一端带有k*10001,这时就应该迅速的想到利用扩展gcd来解决,已知量为1001,a+1,求出gcd(10001,a+1)以及线性方程的系数x,y即可。当发现计算出的数和原来的输入矛盾时,说明a是非...
分类:
其他好文 时间:
2015-02-20 14:08:33
阅读次数:
182
依旧是《训练指南》上的一道例题。书上讲的比较抽象,下面就把解法具体一下。因为涉及到父子关系,因此自然而然可以将n个节点构造成一棵树,最后将形成一个森林。接下来将使用递归的手法。设f(i)是以节点i为树根的子树,节点i有儿子c1,c2,c3....cj共j棵子树。s[i]为树根为i的子树包含的节点数。如果分别先给各个子树内部排序,那么毫无疑问,
共有f(c1)*f(c2)*f(c3)....*f(...
分类:
其他好文 时间:
2015-02-19 18:40:24
阅读次数:
267
大年夜的写代码果然状态非常之差...感觉特别困,连个高精度都折腾了我好久。还是刘汝佳《训练指南》里的一道例题,解题思路其实也差不多,但是想对书里面的内容再讲讲。其中d[i]是代表i个火柴棒恰好能构成的正整数数目(不包含整数0),然后有点类似于动态规划的做法,通过已知的d[]求出剩下的d[]。
不过仔细想来貌似有点问题。例如已知d[j],那么d[j+num[0]]+=d[j].那么新...
分类:
其他好文 时间:
2015-02-18 23:13:20
阅读次数:
329
描述
数轴上有n条线段,线段的两端都是整数坐标,坐标范围在0~10^18,每条线段有一个价值,请从n条线段中挑出若干条线段,使得这些线段两两不覆盖(端点可以重合)且线段价值之和最大。 分析
提供两种思路:
利用离散化. 因为这道题本来就是离散化的例题. 将点排序后依次赋值(1~2n, n为线段的条数), 再通过结构体里的信息将离散化后的点的坐标映射到线段上....
分类:
其他好文 时间:
2015-02-18 16:29:09
阅读次数:
208
将问题的各状态之间的转移关系描述为一个图,则深度优先搜索遍历整个图的框架为:Dfs(v) {if( v 访问过)return;将v标记为访问过;对和v相邻的每个点u: Dfs(u);}int main() {while(在图中能找到未访问过的点 k) Dfs(k);}例题:POJ1164The C....
分类:
其他好文 时间:
2015-02-18 11:49:14
阅读次数:
192
刘汝佳《训练指南》里的一道例题。典型的容斥原理的应用。设C(M*N,K)为在M行,N列里放K个数的方案数。因为要求第一列,最后一列,第一行,最后一行都有放置,显然答案为:
C(M*N,K)-(2*C(M*(N-1),K)+2*C((M-1)*N,K))+(4*C((M-1)*(N-1),K)+C(N*(M-2),K)+C((N-2)*M,K))-(2*C((N-2)*(M-1),K)+2*C((...
分类:
其他好文 时间:
2015-02-17 16:31:03
阅读次数:
159
1.题目描述:点击打开链接
2.解题思路:本题利用集合上的动态规划解决。定义集合s1表示恰好有一个人教的课程,集合s2表示至少有两个人教的课程。定义d(i,s1,s2)表示已经考虑了前i个人时的最小花费(人物编号从0开始)。则不难写出状态转移方程:
d(i,s1,s2)=min{d(i+1,s1',s2')+c[i],d(i+1,s1,s2)};
上式中只有当i≥m时才会考虑第二项。对于这个...
分类:
其他好文 时间:
2015-02-16 17:02:01
阅读次数:
142
1.题目描述:点击打开链接
2.解题思路:本题的分析思路类似于上一道例题。还是利用树状dp解决。根据题意,可以定义如下的三种状态值:
(1)d(u,0)表示u不是服务器,但u的父亲是服务器(暗含u的所有子结点都不是服务器);(2)d(u,1)表示u是服务器,子结点可以是也可以不是;(3)d(u,2)表示u,u的父亲都不是服务器(暗含u的其中一个子结点是服务器);
定义了这样的三个状态之后,状...
分类:
其他好文 时间:
2015-02-15 21:58:12
阅读次数:
169
1.题目描述:点击打开链接
2.解题思路:本题几乎就是树的最大独立集问题,只不过多了一个判断解的唯一性的要求。针对这种情况,可以做如下定义:
(1)d(u,0),f(u,0)分别表示以u为根的子树中,不选u点的最大人数和方案的唯一性(f=1表示唯一,f=0表示不唯一);
(2)d(u,1),f(u,1)分别表示以u为根的子树中,选u点的最大人数和方案的唯一性(f=1表示唯一,f=0表示不唯一...
分类:
其他好文 时间:
2015-02-15 13:34:59
阅读次数:
173
1.题目描述:点击打开链接
2.解题思路:本题利用树状dp解决,不过其实也可以理解为用贪心法解决的。设d(u)表示u给上级发信最少需要的工人个数,假设u有k个子结点,那么根据题意,至少需要c=(k*T-1)/100+1个直属下属发信才行。而每个直属下属的工人数是di,那么这时只需要把di由小到大排序,然后把前c个相加就是d(u)了。最终的答案是d(0)。由于需要排序,因此总的时间复杂度是O(N*...
分类:
其他好文 时间:
2015-02-15 09:31:13
阅读次数:
245