- 博客(10)
- 收藏
- 关注
原创 POJ-1674(n的一个全排列中要变成顺序需要几次交换)
题意:给一个由1-n的整数组成的数列。对其进行交换两个数的操作。请问最少需要多少次操作,使得数列变成升序的1-n思路:举个例子来说,2 5 4 3 1。我们让 i 从1开始判断是否在i是否在该在的位置上。此时i=1不在位置1上,而且位置1上是2。2应该放在位置2上,而位置2上是5。位置5上是1。这就说明1,2,5三个数轮换一下,就能将这三个数换到各自应该在的位置。需要换2次。顺着这个思
2012-02-28 13:35:12 2749
原创 POJ-1432(n!的位数-数论)
问题描述:输入一个整数n(1,10^7),要你输出该整数的阶乘后的位数是多少?问题分析:由于n的输入数可能较大,倘若按照常规算法(就是算出n的阶乘)设计的话,一方面会出现TLE,另一方面会出现数据溢出的情况。所以我们不得不充分利用数学知识里面的对数与指数间的亲密关系。推导以下公式:n!=n*(n-1)*(n-2)*…..*1 n的位数=[lg(n)]+1;所以:n!的位数=[lg(
2012-02-27 23:35:56 701
原创 POJ-3604(数论题目,推公式)
这题的大意就是 给出一个数n, 找到它所有的因子, 然后把这些(因子的因子数)的立方和求出来。题目的时限虽然很宽,但是数据很BT。首先,公式必须找出来。证明如下:先将n质因数分解成形如n = a ^m * b ^ p * c ^q *........;那么要求的结果为函数g(x)的值;我们以n有2个质因数为例子;g(n) = g(a ^m * b
2012-02-22 23:46:23 638
原创 POJ-3991(左括号右括号调整)
int main(){ char s[10000]; int x = 1; while (cin>>s && s[0] != '-') { int i, l = strlen(s); stack S; int ans = 0; int left = 0, right = 0; for (i = 0; i < l; ++i) { if (s[i] == '{') {
2012-02-22 20:32:53 1006
原创 最长递增子序列(poj-3903,1631我,1887(严格下降),2533(严格上升),LIS)
方法一:转换为LCSO(n^2)对原数组排序去重,用一次LCS,要用到滚动数组。方法二:动态规划法设f(i)表示L中以ai为末元素的最长递增子序列的长度。则有如下的递推方程:这个递推方程的意思是,在求以ai为末元素的最长递增子序列时,找到所有序号在L前面且小于ai的元素aj,即jaji。如果这样的元素存在,那么对所有aj,都有一个以aj为末元素的最长递增子序列的长度f(j),把其中
2012-02-22 18:58:57 822
原创 POJ-2229
求一个数能用1, 2, 4, 8, 16......相加表示有多少种方法如果n是奇数的话肯定有一个1,所以可以拿掉如果是偶数的话,要么有两个1,或者全是偶数,前者就拿掉两个1,后者就全部除2。比如4,4=1+1+2;2又有2种分法。这种情况下2又有两种情况。全部都是偶数的情况下4可以分为4与2+2,即为f(4/2)=f(2);int d[1000005];int main()
2012-02-21 12:35:29 599
原创 巧妙转换为求逆序数-状态数组(POJ-3067)
n条线段,求多少个交点。先对右边的点由大到小排序(左边大的点对在前面),然后对左边的求逆序数就可以了。逆序数可以借助状态数组求得。
2012-02-16 13:45:28 531
原创 法雷级数(POJ-3090和POJ-2478)
3090是法雷级数的变形,结果是(法雷级数*2 - 1);2478是(法雷级数-2)法雷级数定义 R.亨斯贝尔格著李忠翻译的《数学中的智巧》一书,介绍了法雷级数。这里每一行从0/1开始,以1/1结尾,其它数自左至右将所有的真分数按增加顺序排列;第n行是由所有分母小于或等于n的真分数组成,我们称为n阶法雷级数。如下表: F1: 0/1 1/1 F2: 0/1 1/2
2012-02-15 21:06:15 566
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人