UVa 12034 Race (递推+组合数学)】的更多相关文章

一开始是想排列组合做的,排列组合感觉确实可以推出公式,但是复杂度嘛.. dp[i][j]表示有i只马,j个名次的方法数,显然j<=i,然后递推公式就很好写了,一只马新加进来要么与任意一个名次的马并行,则加进来后仍有j种名次,且有j个名次可选择,所以新增j*dp[i-1][j]种:要么这匹马插进j-1名次中并变成总共j种名次,所以原来应有j-1种名次,在j-1种名次中有j种插法,所以新增j*dp[i-1][j-1] #include <iostream> #include <stri…
题意:A,B两个人比赛,名次有三种情况(并列第一,AB,BA).输入n,求n个人比赛时最后名次的可能数. 析:本来以为是数学题,排列组合,后来怎么想也不对.原来这是一个递推... 设n个人时答案为f(n)假设第一名有i(0< i <= n)个人,也就是有C(n, i)种,还剩下f(n-i)种可能,然后就so easy了. f(n) = ΣC(n, i)f(n-i). 代码如下: #include <iostream> #include <cstdio> #include…
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3185 题意: A.B两人赛马,最终名次有3种可能:并列第一:A第一B第二:B第一A第二.输入n(1≤n≤1000),求n人赛马时最终名次的可能性的个数除以10056的余数. 分析: 设答案为f(n).假设第一名有i个人,有C(n,i)种可能性,接下来有f(n-i)种可能性,因此答案…
Disky and Sooma, two of the biggest mega minds of Bangladesh went to a far country. They ate, coded and wandered around, even in their holidays. They passed several months in this way. But everything has an end. A holy person, Munsiji came into their…
递推,f[i = i个名次][j = 共有j个人] = 方案数. 对于新加入的第j个人,如果并列之前的某个名次,那么i不变,有i个可供并列的名次选择,这部分是f[i][j-1]*i, 如果增加了一个名次,那么之前有i-1个名次,i-1个名次之间有i个空,这部分是f[i-1][j-1]*i. /********************************************************* * --------------Tyrannosaurus--------- * * au…
将K个不超过N的非负整数加起来,使它们的和为N,一共有多少种方法. 设d(i, j)表示j个不超过i的非负整数之和为i的方法数. d(i, j) = sum{ d(k, j-1) | 0 ≤ k ≤ i },可以理解为前j-1个数之和为i-k,最后一个数为k 还有一种更快的递推办法,把这个问题转化为将N个小球放到K个盒子中的方法数,盒子可以为空. 就等价于求x1 + x2 +...+ xK = N的非负整数解的个数,根据组合数学的知识容易算出结果为C(N+K-1, K-1). 所以也可以这样递推…
UVa 10520 哇!简直恶心的递推,生推了半天..感觉题不难,但是恶心,不推出来又难受..一不小心还A了[]~( ̄▽ ̄)~*,AC的猝不及防... 先递推求出f[i][1](1<=i<=n-1),f[n][i](2<=i<=n)和f[i][j](2<=i<=n-1,1<=j<=i),再递推一次求f[1][j](2<=j<=n),f[1][n]即为答案.其实不太肯定这样是否一定正确,因为我没有特别考虑j=0的边界情况,感觉好像也用不到这个情况.…
UVa 10446 求(n,bcak)递归次数.自己推出来了一个式子: 其实就是这个式子,但是不知道该怎么写,怕递归写法超时.其实直接递推就好,边界条件易得C(0,back)=1.C(1,back)=1. Reference Code: #include<iostream> #include<cstdio> using namespace std; typedef unsigned long long ll; ll dp[][]={}; int main() { int n,bac…
题意: 有两种汉堡给2n个孩子吃,每个孩子在吃之前要抛硬币决定吃哪一种汉堡.如果只剩一种汉堡,就不用抛硬币了. 求最后两个孩子吃到同一种汉堡的概率. 分析: 可以从反面思考,求最后两个孩子吃到不同汉堡的概率. 因为最后两个汉堡是不同的,所以前面的2n-2个孩子吃汉堡之前一定都是要抛硬币的. 所以,吃两种汉堡的孩子人数相等,都是n-1个. 令,对于2n个孩子吃汉堡,所求概率为1 - f(n-1) 我们还可以递推f, #include <iostream> #include <cstdio&…
原文链接http://www.cnblogs.com/zhouzhendong/p/8820963.html 题目传送门 - BZOJ4451 题意 给你一个$n\times n$矩阵的第一行和第一列,其余的数通过如下公式推出: $$f_{i,j}=a\cdot f_{i,j-1}+b\cdot f_{i-1,j}+c$$ 求$f_{n,n}\mod (10^6+3)$. 题解 利用$FFT$来解决此题 真是一道好题只是我太菜了.光$FFT$就调了好久.当然本题可以直接递推(将写在用$FFT$实…
题意:给定一棵 n 个结点的有根树,使得每个深度中所有结点的子结点数相同.求多棵这样的树. 析:首先这棵树是有根的,那么肯定有一个根结点,然后剩下的再看能不能再分成深度相同的子树,也就是说是不是它的约数.那么答案就有了, 我们只要去计算n-1的约数有多少棵不同的树,然后就有递推式了. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <str…
有n张牌,求出至少有k张牌连续是正面的排列的种数.(1=<k<=n<=100) Toss is an important part of any event. When everything becomes equal toss is the ultimate decider. Normally a fair coin is used for Toss. A coin has two sides head(H) and tail(T). Superstition may work in…
GRAVITATION, n.“The tendency of all bodies to approach one another with a strengthproportion to the quantity of matter they contain – the quantity ofmatter they contain being ascertained by the strength of their tendencyto approach one another. This…
除了根节点以外,有n-1个节点,然后就看n-1的因数有那些,所有因数加起来(递推)就好了. #include<cstdio> #define REP(i, a, b) for(int i = (a); i < (b); i++) using namespace std; const int MOD = 1e9 + 7; const int MAXN = 1123; int ans[MAXN]; void init() { ans[1] = 1; REP(i, 2, MAXN) REP(j…
这道题在递推方式和那个数字三角形有一点相像,很容易推出来 但是这道题要求的是字典序,这里就有一个递推顺序的问题 这里用逆推,顺推会很麻烦,为什么呢? 如果顺推的话,最后一行假设有种情况是最小值,那么你怎么知道哪一种的 是字典序最小?最后一行的数字最小显然不一定整个路径的字典序最小,因为 字典序是从第一行开始比较的. 如果非要这么做的话可以把这几种情况的路径全部记下来, 然后排序,选出最小的输出.同时输出路径还要写一个递归.这样显然很麻烦. 但是如果是逆推的话,我们推到最后是第一行,这个时候如果有…
UVa 10074 题意:求01矩阵的最大子0矩阵. http://www.csie.ntnu.edu.tw/~u91029/MaximumSubarray.html#2 这里说的很清楚.先求Largest Empty Interval,枚举每个点为矩形的右下角. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ; i…
Tribble是麻球? 因为事件都是互相独立的,所以只考虑一只麻球. 设f(i)表示一只麻球i天后它以及后代全部死亡的概率,根据全概率公式: f(i) = P0 + P1 * f(i-1) + P2 * f(i-1)2 + ... + Pn * f(n)n 每个麻球死亡是独立的,所以Pj * f(i-1)j 表示生了j个麻球,这j个麻球要在i-1天内全部死亡. #include <cstdio> #include <cmath> using namespace std; + ; d…
<训练之南>上的例题难度真心不小,勉强能看懂解析,其思路实在是意想不到. 题目虽然说得千奇百怪,但最终还是要转化成我们熟悉的东西. 经过书上的神分析,最终将所求变为: 共n个叶子,每个非叶节点至少有两个子节点的 树的个数f(n).最终输出2 × f(n) 首先可以枚举一下根节点的子树的叶子个数,对于有i个叶子的子树,共有f(i)种, 设d(i, j)表示每棵子树最多有i个叶节点,一共有j个叶节点的方案数. 所求答案为d(n-1, n) 假设恰好有i个叶子的子树有p棵,因为每个子树互相独立,所以…
题意: 统计[a, b]中有多少个数字满足:自身是k的倍数,而且各个数字之和也是k的倍数. 分析: 详细分析见<训练之南>吧,=_=|| 书上提出了一个模板的概念,有了模板我们就可以分块计算. 虽然书上定义f(x)表示不超过x的非负整数且满足条件的个数,但为了编码方便,代码中f(x)的含义为0~x-1中满足条件的个数. 这样最终所求为f(b+1) - f(a) #include <bits/stdc++.h> using namespace std; int MOD; ]; ][]…
大白书讲的很好.. #include <iostream> #include <cstring> using namespace std; typedef long long LL; ; LL n,A[MAXN]; int main() { A[] = ; ;i<MAXN;i++) A[i] = A[i-] + ((i-)*(i-)/ - (i-)/)/; while(cin>>n && n) { ) break; cout<<A[n]…
1670 打怪兽  基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 lyk在玩一个叫做“打怪兽”的游戏.游戏的规则是这样的.lyk一开始会有一个初始的能量值.每次遇到一个怪兽,若lyk的能量值>=怪兽的能量值,那么怪兽将会被打败,lyk的能量值增加1,否则lyk死亡,游戏结束.若怪兽全部打完,游戏也将会结束.共有n个怪兽,由于lyk比较弱,它一开始只有0点能量值.n个怪兽排列随机,也就是说共有n!种可能,lyk想知道结束时它能量值的期望.由于小…
https://vjudge.net/problem/UVA-12034 题意:n个人比赛,有多少种可能的结果 假设i个人中,有j个人是第一名,方案数为C(i,j) 所以ans=Σ C(n,j)* f[n-j] #include<cstdio> #define mod 10056 using namespace std; ],C[][]; int main() { ;i<=;i++) C[i][]=; ;i<=;i++) ;j<=i;j++) C[i][j]=(C[i-][j…
Problem Description 近期B厂组织了一次大搬家,所有人都要按照指示换到指定的座位上.指示的内容是坐在位置i 上的人要搬到位置j 上.现在B厂有N 个人,一对一到N 个位置上.搬家之后也是一一对应的,改变的只有位次. 在第一次搬家后,度度熊由于疏忽,又要求大家按照原指示进行了一次搬家.于是,机智的它想到:再按这个指示搬一次家不就可以恢复第一次搬家的样子了.于是,B厂史无前例的进行了连续三次搬家. 虽然我们都知道度度熊的“机智”常常令人堪忧,但是不可思议的是,这回真的应验了.第三次…
Description In graph theory, a matching or independent edge set in a graph G = (V , E) is a set of edges ME such that no two edges in the matching M share a common vertex. The Nobel Prize in XiXiHaHa was awarded to Jerryxf team, amongst other things,…
首先我们按照这三个U的位置来分类,当前三个U在i,i+1, i+2. 那么先看三个U前面,前面不能有三个U,因为我们不能重复计算 那么就是所有的组合减去有U的情况 为了叙述方便,我们设答案为f(n),没有三个U的方案数为 g(n) 那么显然g(n) = 2的n次方-f(n) 然后我们看三个U后面,后面就任意了是2的(n-i-2)次方 但是这里有一个问题,就是可能第i-1个可以和i,i+1组成三个U 或者i-2与i-1,i组成三个U 那么我们就强行让第i-1个是L,就可以避免这种情况 当i-1不存…
从大到小安排杆子 分三种情况 (1)插到最左边,那么左边看到了杆子会多一个 (2)插到最右边,那么右边看到了杆子会多一个 (3)插到中间边,那么不影响左边和右边看到的杆子数 具体看代码 #include<cstdio> #define REP(i, a, b) for(int i = (a); i < (b); i++) using namespace std; const int MAXN = 21; long long d[MAXN][MAXN][MAXN]; int main()…
这道题我已经推出00和1过两步变成00了,可我没有继续做下去-- 后来看了博客发现自己已经做了90%了-- 可惜了,以后不要轻易放弃. 1的个数有个规律,就是每次都乘以2,因为0和1下一步都会变出1 然后因为0和1个个数是一样的,所以1的变出1,0的也变出1 最后1的个数就乘以2了 第i次1的个数为2的(i-1)次方. 最后要用高精度,高精度可以不去弄那些类什么的,直接重数组模拟就好了 可以一位存一万来提高效率. 相加,进位,去零 #include<cstdio> #define REP(i,…
题意: 有n个人赛马,名次可能并列,求一共有多少种可能. 分析: 设所求为f(n),假设并列第一名有i个人,则共有C(n, i)种可能,接下来确定后面的名次,共有f(n-1)种可能 所以递推关系为: #include <cstdio> ; ][maxn+], f[maxn+]; ; void Init() { //递推组合数 ; i <= maxn; ++i) { C[i][] = C[i][i] = ; ; j < i; ++j) C[i][j] = (C[i-][j-] + C…
题目链接: https://vjudge.net/problem/POJ-3421 题目大意: 给你一个数X,将X分解成1~X的因子数列,前一个数可以整数后一个数,求满足条件的最大链长以及有多少条这样长的链. 思路一: 自己的解答: 首先求出所有的因子,排序,然后定义一个length数组和tot数组,length[i]表示从第i个因子到最后一个因子的最大链长,tot[i]表示第i个因子到最后一个因子的最大链长的种类,要求length[0]和tot[0] 已知length[last] = 0,to…
UVA 11077 - Find the Permutations option=com_onlinejudge&Itemid=8&page=show_problem&category=485&problem=2018&mosmsg=Submission+received+with+ID+13900478" target="_blank" style="">题目链接 题意:给定n,k求出有多少个包括元素[1-n…