摘要:
其实。。这题是《组合数学》的习题中的一道。。。。。。当初不会。。。。。想到一个证明:填入2n个数,把填在上方的数的位置填上+1,下方的填上-1。这样,在序列1....2n的位置,任意前部分和都是>=0且是符合题意的。为什么?首先,可以知道,按+1/-1的位置按顺序在上方或下方填数,必定是符合递增的。... 阅读全文
摘要:
一块药看成括号配对就行了。很明显的直接求卡特兰数。今晚看了HDU 3240的题,有一点思路,但无情的TLE。想不到什么好方法了,看了别人的解答,哇。。。简直是天才的做法啊。。。。留到星期六自己思考一遍再重新写。import java.math.BigDecimal;import java.math.... 阅读全文
摘要:
把向上看成+1,向下看成-1.可以知道符合卡特兰数的一般解释了。记作Can(i)中间平过的即是0。亦即是C(n,2*i),i表示向上的数。于是总的就是sum(C(n,2*i)*Can(i)),i从0至n/2。注意,通项是可以通过递推求得的。import java.math.BigDecimal;im... 阅读全文
摘要:
N个节点的不同的树的数目。这样随便取一个节点作为根,那么他左边和右边的儿子节点个数就确定了,假定根节点标号为x,那么左子树的标号就从1到x-1,共x-1个,右子树的标号就从x+1到n,共n-x个,那么我们的x从1取到n,就获得了所有的情况数。这是一个递推的式子,初始值与卡特兰数的初值相同。所以,解正... 阅读全文
摘要:
简单的卡特兰数应用。这篇总结得不错http://daybreakcx.is-programmer.com/posts/17315.htmlimport java.math.BigDecimal;import java.math.BigInteger;import java.util.Scanner;... 阅读全文
摘要:
n+m个人排队买票,并且满足,票价为50元,其中n个人各手持一张50元钞票,m个人各手持一张100元钞票,除此之外大家身上没有任何其他的钱币,并且初始时候售票窗口没有钱,问有多少种排队的情况数能够让大家都买到票。这个题目是Catalan数的变形,不考虑人与人的差异,如果m=n的话那么就是我们初始的C... 阅读全文
摘要:
卡特兰数的例题了。import java.math.BigDecimal;import java.math.BigInteger;import java.util.Scanner;import java.io.InputStreamReader;public class Main{ public s... 阅读全文
摘要:
卡特兰数。把进栈看成是+1,出栈看成是-1,任何时候部分和都有a1+a2+....ak>=0。求这样的数列的个数。这明显是卡特兰数的一个解释嘛。在《组合数学》这本书就有这样的原本的证明。import java.io.InputStreamReader;import java.math.BigDeci... 阅读全文
摘要:
这题,找找规律,可以发现一个斐波那契数列。按照斐波那契数列求和,知道,SUM=Fn+2-F1,于是,该长度为Fn+2的倍数。因为斐波那契数列不一定是从1开始的,而从2开始的每个数都是从1开始的倍数。于是,只需求出最大的Fn+2是长度的倍数即可。#include #include #include u... 阅读全文
摘要:
简单的指数型生成函数题,就是按照泰勒级数化简而已。#include #include #define MOD 100#define LL __int64using namespace std;int quick(int a,LL b){ int ans=1; while(b){ if(b&1) ... 阅读全文
摘要:
指数型生成函数。做这题时,回去看看组合数学才知道,指数生成函数求的就是多重集合的r排列数。#include #include #include #define N 15using namespace std;struct PQ{ int p,q;};PQ c1[N],c2[N];int num[N]... 阅读全文
摘要:
生成函数简单题#include #include #include #include #define N 110using namespace std;struct Fruit{ int a,b;};Fruit num[N];int c1[N],c2[N];int main(){ int n,m; ... 阅读全文
摘要:
把多项式变成二维的即可,设c[i][j]为i枚硬币下j元的组合数。(因为限定不能超过100个硬币)。然后就是普通的生成函数的题了。#include #include #include #include #define N 260using namespace std;int c1[N][N],c2[... 阅读全文
摘要:
MB,一开始就想到是不是只要加上一个不选择砝码的情况,但一直没动手做,因为看了看网上了,觉得总有点复杂,认为自己想错了。。。。相信自己#include #include #include #include #define N 101using namespace std;int c1[N*N],c2... 阅读全文
摘要:
只需要把增量改为i*i即可与上篇 1028 一样#include #include #include #include #define N 350using namespace std;int c1[N],c2[N];int main(){ for(int i=0;i<=300;i++){ c1[... 阅读全文