随笔分类 -  数论&数学

摘要:数学题(概率基本知识+DP记忆化搜索实现)题意:概率题:丢n个骰子,和大于等于x的概率是多少,用反面来求,1-小于x的概率首先丢n个骰子,可以看做是依次丢的(独立重复试验),每次丢的点数记录下来,比如3个筛子123和132是不同的,所以就是一个排列(而不是组合),那么总的可能为6^n,要用long long 保存。然后再找出有多少个排序和和是小于x的。这个找特殊排列的过程用DP来构建才不能超时(我用的是记忆化搜索,当然递推也是可以的,仿照记忆化搜索来写的,个人更倾向于记忆化搜索,容易理解,而且应该很多没用的状态不会去到,但是递推会推出所有状态)记忆化搜索,开一个二维数组dp[i][j],表示现 阅读全文
posted @ 2012-12-25 21:02 Titanium 阅读(353) 评论(0) 推荐(0)
摘要:数学题(概率基础题+暴力)题意:给你n个人,给出每个人会购物的概率,然后给你r,即r个人会购物其余人都不购物。然后需要你输出n行,第i行就是这个r个人中有一个是第i个的概率是多少其原型就是,有5个人,选3个人出来,甲在其中的概率。不过5变成了n,3变成了r。这个样子的话就是一个条件概率即pb为从n个人中选r个的概率。pa就是甲在其中的概率 pa/pb就是答案这个样的话,只能暴力了(我只能想到暴力),即在n个人中找出r个人(就是一个组合,不是排列),把这r个人的概率相乘其余人的反面概率相乘。然后所有的这些我概率相加就是pb。然后同样的,选定甲,再选r-1个人(组合),甲和这r-1个人的概率相乘. 阅读全文
posted @ 2012-12-24 22:58 Titanium 阅读(641) 评论(0) 推荐(0)
摘要:数学题题意:多项式(x1+x2+...+xk)n.输入n和k(0<k,n<13),分别表示多项式次数和变元数。第二行为k个非负整数n1,n2,...nk,满足n1+n2+...nk=n.输出多项式(x1+x2+...+xk)n展开后的(x1)^n1*(x2)^n2...(xn)^nk这一项的系数。思路:如果单单是(a+b)^n,那我们可以轻易地用二项式定理来解决系数的问题,但是现在变量有k个,要怎么办呢?我们可以用一种递归的思想来看这道题,化繁为简,将一个没见过的问题转化为见过的(x1+x2+x3……+xk-1+xk)^n=(Xk-1+xk)^n , 即我们把前面k-1项全部加起来 阅读全文
posted @ 2012-12-22 13:31 Titanium 阅读(533) 评论(0) 推荐(0)
摘要:数学题,给定一个十进制数转化为-2进制。这个问题可以扩展为转化为任意的负进制,先说-2进制算法:n mod -2 余数可能为-1,0,1,但是不能出现-1,只能有0,1所以将-1变为1,并且商要加1。然后依此迭代直到商为0为止。为什么余数要变为1而且能变为1呢,变了之后要怎么做呢?我找了很多博客都没有说原理,只是简单一句话,可能大家都觉得很简单吧,但是我还是想了一段时间才想出来的,所以就写一下原理我们来看一个10进制转2进制,例子1024第0次迭代,1024/2=512,1024%2=0 , 试一下把512++变为513,那么逆回去就是1026,多了2,其实就是2^1第1次迭代,512/2=2 阅读全文
posted @ 2012-12-21 18:54 Titanium 阅读(751) 评论(0) 推荐(0)
摘要:数论水题,但是因为自己数论比较弱,而且这题也想了半个小时,所以还放上来题意:对于任意一个非负数N,我们定义D(N) 为N上奇数数字的和加上两倍偶数数字的和。举个例子:D(567) = 5 + 6 * 2 + 7 = 24, D(314159) = 3 + 1 + 2 * 4 + 1 + 5 + 9 = 27. 令F(N)表示D(N)的最后一位数字。例如:F(567) = 4, F(314159) = 7。你的问题是,给你两个数A, B,你要计算出∑F(i), i ∈ [A, B]输入格式第一行输入一个整数T,表述有T组case。(T <=1000)接下来T行,每行输入两个数字A, B ( 阅读全文
posted @ 2012-12-02 17:00 Titanium 阅读(469) 评论(0) 推荐(0)
摘要://用中国剩余定理解决韩信点兵问题#include <stdio.h>long long max,x,m[8],b[8],M[8],n,N;int p[8];int main(){ int i,j,k; for(n=1,i=0; i<8; i++) {scanf("%lld",&m[i]); n=n*m[i];} //读入除数数组,注意n,为所以除数的乘积 /***************检验n和m[]数组***************/ //printf("%lld\n",n); //for(i=0; i<8; i++) 阅读全文
posted @ 2012-11-23 19:24 Titanium 阅读(591) 评论(3) 推荐(0)