随笔分类 -  数论

第二类stirling数(n个球放m个盒子里)
该文被密码保护。

posted @ 2012-07-29 16:45 buptLizer 阅读(4) 评论(0) 推荐(0)

最小数目的硬币组合问题(dp)
摘要:问题:给出硬币种类,及要组合的sum,求用最少的硬币数目到达sum。例如:硬币种类1,5,8 sum为20,则最少的硬币数目为5555。分析此题,立刻想到的思路是贪心,从大的往小的搜索,最后到达sum后返回,仔细想想,这个思路是不对的。看上面的例子,正确答案为5555,可是我们用刚才的思路则得出的结论为881111,显然是不对的。想想错误原因,很简单,我们第一步选择8,剩余的12个问题的最优解不一定就是原问题的最优解,所以此题采用动态规划即算出达到当前状态的前一个状态的所有值,我们取最小的。令dp[i]表示sum为i时的最小硬币数目,则dp[i] = min{dp[i-aj] + 1, 0&l 阅读全文

posted @ 2012-04-01 17:00 buptLizer 阅读(2301) 评论(0) 推荐(0)

求用1,2,5这三个数不同个数组合的和为100的组合个数
摘要:这个题目其实很简单,直接利用dfs就出来,复杂度为O(100*50*20)可是看网上一个很好的分析,时间复杂度特别小。分析: 假设a*1 + b*2 + c*5 = 100;非常容易看出c的循环次数最小,那么枚举c开始c=0, a的取值为100,98,96,94,...,4,2,0c=1,a的取值为95,93,91,89,...,5,3,1c=2,a的取值为90,88,86,...,4,2,1c=3,a的取值为85,83,81,...,5,3,1.....c=19,a的取值为5,3,1c=20,a的取值0现在看出规律了吧,100以内的偶数+95以内的奇数+90以内的偶数+。。。+5以内的奇数+ 阅读全文

posted @ 2012-03-31 20:29 buptLizer 阅读(2013) 评论(0) 推荐(0)

查找两个已经排好序的数组的第k大的元素
摘要:题目意思:给出两个排好序的数组 ,不妨设为a,b都按升序排列,及k的值,求出第k大的那个元素。分析这个题目,如果题目没有时间复杂度的要求,我们可以定义两个指针i,j分别指向a,b,如果a[i]<b[j]则i++否则j++,这个记录下走了多少步,如果==k步,则找到了第k大的元素,复杂度为O(k).那么如果有复杂度的要求,要求为O(log(len_a+len_b))呢,这个就得好好考虑,怎么利用二分来解决这个问题。解法一:假如第k大的数在a中,设置a[mid],那么肯定有b[k-mid-1]<=a[mid]<=b[k-mid],这是由于a中已经有mid个元素<a[mid] 阅读全文

posted @ 2012-03-31 20:19 buptLizer 阅读(4431) 评论(0) 推荐(0)

素数-简单题
摘要:1.素数筛选法模板:View Code /* *@brief 初始化素数数组 */void init_prime(){ memset(is_prime, true, sizeof(is_prime)); //筛掉偶数 for(int k = 4; k < maxn; k +=2) { is_prime[k] = false; } int sq = (int)sqrt((double)maxn); //筛掉素数的倍数 for(int i = 3; i <= sq; ++i) { if(is_prime[i]) ... 阅读全文

posted @ 2012-03-11 11:57 buptLizer 阅读(893) 评论(0) 推荐(0)

置换群
摘要:看了几天置换群,一直没搞清楚定义是怎么回事,一个置换可以写成若干循环的乘积,那么如果置换求幂的话,一个循环不会跑到另一个循环里面去。我们可以简单理解为这几个位置的数来回换。poj3270给出一列数,求将这列数排成升序的最小花费,这里花费定义为交换两个数的和。例如给出一排数8 4 5 3 2 7,那么我们最终的状态为2 3 4 5 7 8,这里的轮换有(8 2 7)(4 5 3),这里8应该在第六个位置,而第6个位置是7,7应该在5这个位置,而第5个位置为2,2应该在1这个位置,这样就到了8所在的位置,我们称这是一个轮换。首先需要明确的一点是对于每个群,假设有k个数,那么我们需要交换k-1次得到 阅读全文

posted @ 2011-11-15 12:07 buptLizer 阅读(7652) 评论(0) 推荐(1)

poj3983 (24点)
摘要:给出4个数,只能添加+-*/或者()使得结果为24。思路:枚举,一共5*3^4.#include <iostream>using namespace std;double a,b,c,d;double f(double a,double b,int op){ if(1 == op) return a+b; if(2 == op) return a-b; if(3 == op) return a*b; return a/b;}//type表示加括号的方式,一共5种bool caculate(int p1,int p2,int p3,int type){ double ans=0.0; 阅读全文

posted @ 2011-11-10 21:56 buptLizer 阅读(814) 评论(0) 推荐(0)

poj1995快速幂取余
摘要:快速幂运算:View Code int pow(int a,int n){ int rs=1; while(n) { if(n&1) rs=rs*a; a=a*a; n=n>>1; } return rs;}快速幂取余://求a^b%n,O(logb)__int64 get_mi_mod(__int64 a,__int64 b,int n){ if(0 == a) return 0; if(0 == b) return 1; __int64 rs=1; while(b) { if(b&1) rs=(rs*a)%n; a=(a*a)%... 阅读全文

posted @ 2011-11-10 15:01 buptLizer 阅读(1116) 评论(1) 推荐(0)

poj1338 寻找丑数
摘要:poj 1338,2247,2545,2591这几个都是类似的题目,就是将满足要求的数列出来,给出一个n,问你第n个数是多少?以1338为例:对于每一个质数2 3 5,我们都要找到对应的之前已经计算出的最小的丑数使之乘以这个质数后大于当前的丑数,然后再从这三个里取最小的那个,我们记录三个数a2,a3,a5,分别保存对应的质数计算到哪个下标了,然后更新所有质数对应的下标,使之乘积大于当前的丑数。#include <iostream>using namespace std;const int M=1501;int ans[M];int getMin(int a,int b,int c) 阅读全文

posted @ 2011-11-03 09:45 buptLizer 阅读(1699) 评论(0) 推荐(0)

数论三(母函数)
摘要:首先简要介绍下母函数是什么,然后说下它的应用场景,及相关题目。1母函数对于序列a0,a1,a2...构造一个函数G(x)=a0+a1x+a2x^2+...,我们成G(x)是序列a0,a1,a2,...的母函数。例如:(1+x)n是序列C(n,0),C(n,1),...,C(n,n)的母函数。如若已知序列a0,a1,a2,…则对应的母函数G(x)便可根据定义给出。反之,如若已经求得序列的母函数G(x),则该序列也随之确定。序列a0,a1,a2,…可记为{an} 。2应用场景a 邮票或者硬币的组合问题eg:若有1克、2克、3克、4克的砝码各一枚,能称出哪几种重量?各有几种可能方案?考虑构造母函数。 阅读全文

posted @ 2011-10-26 09:58 buptLizer 阅读(656) 评论(0) 推荐(0)

数论二(hdoj 卡特兰数)
摘要:卡特兰数:1 通项公式:h(n)=C(n,2n)/(n+1)=(2n)!/((n!)*(n+1)!)2递推公式:h(n)=((4*n-2)/(n+1))*h(n-1); h(n)=h(0)*h(n-1)+h(1)*h(n-2)+...+h(n-1)*h(0).3前几项为:h(0)=1,h(1)=1,h(2)=2,h(3)=5,h(4)=14,h(5)=42,......4应用场景:a.括号化问题。 矩阵链乘:P=a1×a2×a3×……×an,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案?(h(n)种)b.出栈次序问题。 一 阅读全文

posted @ 2011-10-23 20:53 buptLizer 阅读(4996) 评论(0) 推荐(2)

数论一(hdoj 简单数学题、推理题)
摘要:100811081061题目让求N^N的最低位,N的最低位只与它最低位的N次方有关系,所以我们对一个数求它的N次方的时候,只考虑最后一位的连乘。一个数连乘是有规律的,比如2,循环节就是2,4,8,6。数组result[]保存得就是我们的循环节。源码如下:#include <iostream>using namespace std;const int N=10;bool used[N];int result[N];int main(){ int t,n,i; cin>>t; while(t-->0) { cin>>n; int dig=n%10; int 阅读全文

posted @ 2011-10-23 18:42 buptLizer 阅读(1213) 评论(0) 推荐(0)

导航