- 博客(6)
- 资源 (2)
- 收藏
- 关注
原创 1-n全排列的几种算法
全排列的生成算法全排列的生成算法就是对于给定的字符集,用有效的方法将所有可能的全排列无重复无遗漏地枚举出来。任何n个字符集的排列都可以与1~n的n个数字的排列一一对应,因此在此就以n个数字的排列为例说明排列的生成法。n个字符的全体排列之间存在一个确定的线性顺序关系。所有的排列中除最后一个排列外,都有一个后继;除第一个排列外,都有一个前驱。每个排列的后继都可以从它的前驱经过最少的变化而得到,全排列的
2013-09-28 19:08:53 5127
原创 HDU 1717 小数化分数2 做题笔记
将有限小数化为分数的方法都知道,就是分子分母同时除以他们的最大公约数,不提。无限循环小数化为分数的方法就是将这个数分别乘以10的倍数2次,使乘以的2个数的小数相同,然后相减约去小数,再算得。如:将x=23.37(593)化为分数。100*x=2337.593593······,100000*x=2337593.593593······。则100000x-100x=2337593-2337,
2013-09-16 20:28:00 771
原创 求最大公约数的两种方法
1、辗转相除法:两个整数的最大公约数是能够同时整除它们的最大的正整数。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。如:319,377a b a%b377%319=58319%58=2958%29=0所以最后结果为29。递归和非递归代码如下:#include#includeusing namespace s
2013-09-04 14:31:23 725
原创 poj 1065做题笔记
用到了dilworth定理:链的最少划分数=反链的最长长度(没有验证过)。如4、1、5、9、2的最少的非递减子序列的个数就是其最大递减子序列长度。采用两种方法具体见:poj 2533做题笔记。前一个110MS,后一个16MS。差别还是蛮大的。代码如下:#include#include#includeusing namespace std;const int N=5010;
2013-09-03 20:29:17 559
原创 poj 2533做题笔记
本题是求最长上升子序列(LIS)问题。O(n^2)的思路: 令a[i]表示第i个元素,d[i]表示从a[1]到a[i]中以a[i]结尾的最长子序列长度。对于任意的0 a[j],则a[i]可以接在a[j]后面形成一个以a[i]结尾的新的最长上升子序列。DP状态转移方程: d[i] = max{d[i], d[j] + 1} (j = 1, 2, 3, ...,i-1 且a[j] 解
2013-09-03 17:06:44 535
原创 hdu 1084做题笔记
题意是:有N个人做5道题,给出做出题的个数和花费的总时间,做出5道题给100分,做出4道题给95或90,类推。如果有>=2个人做出题的数目一样,则取前n/2的人较多的分数,如有3个人做出4道题,则第一得95分,其他得90分。主要用的是sort函数。AC代码如下:#include#include#includeusing namespace std;const int N=101;
2013-09-02 20:17:06 695
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人