UVa 12034 (递推) Race】的更多相关文章

题意: 有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…
题意: 有两种盒子分别装有铀(U)和铅(L),现在把n个盒子排成一列(两种盒子均足够多),而且要求至少有3个铀放在一起,问有多少种排放方法. 分析: n个盒子排成一列,共有2n中方案,设其中符合要求的为f(n)种. f(n)可由下面两种情况递推出来: 前n-1个盒子的摆放满足要求,则第n个盒子可以摆放U也可以摆放L,共有2×f(n-1)中方案 前n-1个盒子不满足要求,要使前n个盒子满足要求,则第n-2.n-1.n个盒子一定是U.又因为前面的假设,所以第n-3个盒子一定是L(否则前n-1个盒子满…
约瑟夫变形,先计算出3个数时,最后三个数字的编号. 然后以这三个数为起点,就可以递推出n个数对应的最后三个数字的编号. 递推公式都是一样的. #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; + ; ]; int main() { int T; scanf("%d", &T); whi…
题意: 有一个01串,每一步都会将所有的0变为10,将所有的1变为01,串最开始为1. 求第n步之后,00的个数 分析: 刚开始想的时候还是比较乱的,我还纠结了一下000中算是有1个00还是2个00 最终想明白后,并不会出现这样的子串. 总结了几个要点: 第n步之后,串的长度为2n,且0和1的个数相等,分别为2n-1 1经过两步变化为1001,所以每个1经过两步变化就会得到一个00,而且这个00分别被左右两边一个1包围着,不会与其他数字凑出额外的00 0经过两步变化为0110,所以00就会变成0…
题意: 有n个点围成一圈,这n个点的匹配就是没有公共点的边集(这些边只能连接一圈中相邻的两点),求所有匹配的个数. 额,我不会分析..=_=|| 算了几个数,找找规律发现它满足斐波那契数列的递推关系,f(n) = f(n-1) + f(n-2) 自从会用了Java的BigInteger,就懒得写C的高精度了. import java.io.*; import java.util.*; import java.math.*; public class Main { static PrintWrit…
很遗憾,这么好的一道题,自己没想出来,也许太心急了吧. 题意: 有长度为1.2.3...n的n个杆子排成一行.问从左到右看能看到l个杆子,从右往左看能看到r个杆子,有多少种排列方法. 分析: 设状态d(i, j, k)表示i(i≥2)个长度各不相同的杆子,从左往右看能看到j个杆子,从右往左看能看到k个杆子的排列方法.现在假设除了最短的那个杆子,其他i-1个杆子的位置都已排好.那么考虑最短的杆子的位置,有三种决策: 将最短的放到最左边,这样左视图中看到的杆子数加一,右视图不变. 将最短的放到最右边…
题意: 有多少个n个节点的有根树,满足每层节点的子节点个数相同,输出该数目除以1e9+7的余数. 分析: 这种题目就属于那种,看起来很高冷,读完题更高冷.想了N久想不出来,一搜题解,卧槽,这么sb的题我都不会. 言归正传,根据题意,这棵树是关于根节点对称的,对称性非常好,根节点下面的子树也完全相同. 所以就有了如下递推关系: #include <cstdio> #include <cmath> ; + ; ]; void Init() { ans[] = ; ; i <= m…
In Africa there is a very special species of bee. Every year, the female bees of such species give birthto one male bee, while the male bees give birth to one male bee and one female bee, and then they die!Now scientists have accidentally found one “…
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的边界情况,感觉好像也用不到这个情况.…
链接: 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…
题意: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…
递推,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…
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…
UVA 1541 - To Bet or Not To Bet 题目链接 题意:这题题意真是神了- -.看半天,大概是玩一个游戏,開始在位置0.终点在位置m + 1,每次扔一个硬币,正面走一步,反面走两步,走到的步上有4种情况: 1.向前走n步 2.向后走n步 3.停止一回合 4.无影响 问能在t次机会内,走到终点m + 1(假设跃过也算走到了)的概率.大于0.5.等于0.5,小于0.5相应不同输出 思路:题意懂了就好办了.事实上就是递推就能够了dp[i][j]表示第i次机会,落在j步的概率.然…
UVA 10288 - Coupons option=com_onlinejudge&Itemid=8&page=show_problem&category=482&problem=1229&mosmsg=Submission+received+with+ID+13896541" target="_blank" style="">题目链接 题意:n个张票,每张票取到概率等价,问连续取一定次数后,拥有全部的票的期…
题目传送门 /* 题意:汉诺塔问题变形,多了第四个盘子可以放前k个塔,然后n-k个是经典的汉诺塔问题,问最少操作次数 递推+高精度+找规律:f[k]表示前k放在第四个盘子,g[n-k]表示经典三个盘子,2 ^ (n - k) - 1 所以f[n] = min (f[k] * 2 + g[n-k]),n<=10000,所要要用高精度,另外打表能看出规律 */ /************************************************ * Author :Running_Ti…
题目传送门 /* 题意:抽象一点就是给两个矩阵,重叠的(就是两者选择其一),两种铺路:从右到左和从下到上,中途不能转弯, 到达边界后把沿途路上的权值相加求和使最大 DP:这是道递推题,首先我题目看了老半天,看懂后写出前缀和又不知道该如何定义状态好,写不出状态转移方程,太弱了. dp[i][j]表示以(i, j)为右下角时求得的最大值,状态转移方程:dp[i][j] = max (dp[i-1][j] + sum1[i][j], dp[i][j-1] + sum2[i][j]); sum1表示列的…
题目:UVA - 590Always on the run(递推) 题目大意:有一个小偷如今在计划着逃跑的路线,可是又想省机票费. 他刚開始在城市1,必须K天都在这N个城市里跑来跑去.最后一天达到城市N.问如何计划路线的得到最少的费用. 解题思路:一開始题目意思就理解有些问题. dp[k][i]:代表在第k天小偷从某一个城市(除了i)坐飞机飞到城市i(到达城市i也是在这一天). 第k天的话,就看这一天坐哪个航班,加上之前的费用是最小的,就选这个方法. 然后k+ 1天就又是由第k天推出来的. 状态…
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1884 题目大意: 把K个不超过N的非负整数加起来,使得他们的和为N,有多少种方法?比如N=5,K=2,有6种方法.即0+5,1+4,2+3,3+2,4+1,5+0. 输入N和K,求方法总数除以10^6的余数 思路: 递推,从(n-1,k)种的解+上1不就是答案了么?同理从(n,k-1)中加上…
UVa 926 题意:给定N*N的街道图和起始点,有些街道不能走,问从起点到终点有多少种走法. 很基础的dp.递推,但是有两个地方需要注意,在标记当前点某个方向不能走时,也要同时标记对应方向上的对应点.另一点就是要开long long存.要是不考虑障碍的话,按组合数算从(1,1)走到(n,n)需要2*n步,东.北方向各走n步,结果就是C(n/2,n),这个结果会很大!!! #include<iostream> #include<cstdio> #include<cstring…
UVa 825 题意:给定一个网格图(街道图),其中有一些交叉路口点不能走.问从西北角走到东南角最短走法有多少种.(好像没看到给数据范围...) 简单的递推吧,当然也就是最简单的动归了.显然最短路长度就是row+col.求种数就从开始往后推. 由于第一行第一列也有可能是障碍点,所以初始化时要注意这一点,或者干脆就只初始化f[0][1]=1.i.j都从1开始递推到更方便.还有题目输入输出比较坑.输入我用的是sstream和stream,方便很多,要不还要按照字符串输入再手动转化成数字.输出让每组隔…
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…
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2370 一道递推的题. 这道题的递推方程很容易可以想到,是枚举加上哪一个数字,把方法数累加起来.这道题主要是要注意前缀0的问题,可以通过枚举第一个数字不是一的所有情况,然后最后询问大于6的时候就加一. 代码如下(JAVA): import java.math.BigInteger; impor…
When Mr. and Mrs. Clinton's twin sons Ben and Bill had their tenth birthday, the party was held at the McDonald's restaurant at South Broadway 202, New York. There were 20 kids at the party, including Ben and Bill. Ronald McDonald had made 10 hamburg…
将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). 所以也可以这样递推…
如果已经有三个相邻的X,则先手已经输了. 如果有两个相邻的X或者两个X相隔一个.,那么先手一定胜. 除去上面两种情况,每个X周围两个格子不能再放X了,因为放完之后,对手下一轮再放一个就输了. 最后当“禁区”布满整行,不能再放X了,那个人就输了. 每放一个X,禁区会把它所在的线段“分割”开来,这若干个片段就可以看做若干个游戏的和. 设g(x)表示x个连续格子对应的SG函数值,递推来求g(x): g(x) = mex{ g(x-3), g(x-4), g(x-5), g(x-6) xor g(1),…
题意: 有两种汉堡给2n个孩子吃,每个孩子在吃之前要抛硬币决定吃哪一种汉堡.如果只剩一种汉堡,就不用抛硬币了. 求最后两个孩子吃到同一种汉堡的概率. 分析: 可以从反面思考,求最后两个孩子吃到不同汉堡的概率. 因为最后两个汉堡是不同的,所以前面的2n-2个孩子吃汉堡之前一定都是要抛硬币的. 所以,吃两种汉堡的孩子人数相等,都是n-1个. 令,对于2n个孩子吃汉堡,所求概率为1 - f(n-1) 我们还可以递推f, #include <iostream> #include <cstdio&…
 Burger  When Mr. and Mrs. Clinton's twin sons Ben and Bill had their tenth birthday, the party was held at the McDonald's restaurant at South Broadway 202, New York. There were 20 kids at the party, including Ben and Bill. Ronald McDonald had made 1…
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33059 [思路] 递推+概率. 设f[i]表示一只Tribble经过i天之后死绝的概率,则有递推式: f[i]=p[0]+p[1]*(f[i-1]^1)+…p[n-1]*(f[i-1]^n-1) 最后答案为f[m]^k [代码] #include<cstdio> #include<cstring> #define FOR(a,b,c) for(int…