摘要: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1346明天写题解!!!!问题描述:求最长公共子序列1、递推求解:#include#include#include#includeusing namespace std;char s1[1100],s2[1100];int c[1100][1100];int LCS(){ int n=strlen(s1); int m=strlen(s2); memset(c,0,sizeof(c) 阅读全文
posted @ 2013-11-28 23:58 little_w 阅读(240) 评论(0) 推荐(0)
摘要: 题目描述:给定n维的m个物品,按照各维长度严格递增的排序,求最长的序列,并按照字典序输出。例如n=4,(1 2 3 4)之后是(2,3,4,5)就可以。思维过程:《入门经典》上DAG模型。枚举状态结点时,出现了思维误区。想要把n维的n个长度滚动成n种状态点。上述考虑固然可以,但是不是n种状态点,因为... 阅读全文
posted @ 2013-11-27 23:17 little_w 阅读(480) 评论(0) 推荐(0)
摘要: 题目地址:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=114&page=show_problem&problem=47题目描述:给定一个1--n乱序的标准序列输入另一个待求1--n序列,求解到底待求序列中最大有多长的连续的数,符合标准序列的相对顺序。例如: 2 4 1 3 5 3 1 4 5 2答案:2(4,5或1,5或3,5)算法描述:一、这到问题关键是在于思维:因为要考虑到所有情况是不可能的,有因为在乱序上不好做操作,所以要做预处理:1、第一种,将 阅读全文
posted @ 2013-11-27 22:48 little_w 阅读(236) 评论(0) 推荐(0)
摘要: 一、静态最优查找树概念:1、首先明确静态树的概念。查找过程中树的结构不发生改变。2、假设每个点要求被查找的概率是p[i],权值为C[i],这里可以理解为查找到时的层数;3、PH=sigm{P[i]C[i]}4、PH最小的树是静态最优查找树;缺点:花费的时间代价比较高优化方法:次优查找树二、次优查找树构建方法:1、假设一个按关键字有序的记录序列(r[l],r[l+1]........r[h])相应的权值是w[i]2、P[i]=|sum(w[l]+w[l+1]....w[i])-sum(w[i+1]+w[i+2]+w[i+3].....+w[h])| O(n)的复杂度记忆化实现取值最小的P[i], 阅读全文
posted @ 2013-11-25 13:54 little_w 阅读(2110) 评论(0) 推荐(0)
摘要: ---恢复内容开始---一、题目描述:给定n(w。对于前面的边,首先拿出第一条边f1建边,两点选一个建造机场;对于后续读取的边,如果两个顶点在同一联通分量里,显然这条边不需要修建。关键是下面两种情况:(1)红色是当前读取到的边,那么我们发现在7节点单独建一个新的飞机场显然更划算;我们可以用归纳证明得... 阅读全文
posted @ 2013-11-13 23:32 little_w 阅读(338) 评论(0) 推荐(0)
摘要: 1 #include 2 #include 3 #include 4 #include 5 #define mod 1000000007 6 long long dp[1010]; 7 void getdp() 8 { 9 memset(dp,0,sizeof(dp));10 dp[1]=1;11 for(int i=2;i<=1000;i++)12 {13 for(int j=1;j<=i;j++)14 {15 if ((i-1)%j==0) dp[i]+=dp[j],dp[i]=dp[i]%mod;1... 阅读全文
posted @ 2013-10-31 13:29 little_w 阅读(146) 评论(0) 推荐(0)
摘要: 1 //http://www.cnblogs.com/yefeng1627/archive/2013/04/24/3040112.html 2 #include 3 #include//最好开这个库//数学计算交c++更快 4 #include 5 #include 6 #include 7 #define maxn 410000 8 double F[maxn]; 9 void builtF()10 {11 F[1]=0;12 for(int i=1;i log(C(m,n))=log(n!)-log(m!)-log((n-m)!) 要知道log(10000!)都是很小的,... 阅读全文
posted @ 2013-10-31 13:22 little_w 阅读(372) 评论(0) 推荐(0)
摘要: 1 #include 2 #include 3 #include 4 using namespace std; 5 struct Node 6 { 7 int r;//余数 8 int f;//父亲节点 9 int n;//数字10 Node(){};11 Node(int r1,int f1,int n1){r=r1;f=f1;n=n1;}12 }node[10010<<2];13 int d[11];14 bool rem[11000];15 int n,m;16 void print(int f)17 {18 if (node[f].f!... 阅读全文
posted @ 2013-10-31 12:51 little_w 阅读(205) 评论(0) 推荐(0)
摘要: 并查集:我们知道p[x]中存储的是x的根节点,或者说,我们要的目的是所有在一棵树上的节点,他们的p[x]必须是相同的并查集的代码很简单,但在使用时很难达到上述结果,或者说,稍有不慎,就会出错。也许你会说我只要判断find(i)==find(1)都成立就好了,但这往往只能判断一个连通集的问题。所以具体的方法是什么?我们先描述方法,再证明。步骤:int find(int x){return x==p[x]?x:p[x]=find(p[x]);}read(u,v);f1=find(u);f2=find(v);if(f1!=f2) p[f2]=f1;for(i=1;i13423结果: x 1 2 .. 阅读全文
posted @ 2013-10-24 12:46 little_w 阅读(137) 评论(0) 推荐(0)
摘要: double func(double a, double b, double x) { double r = a * exp(- x*x) + b * sqrt(x); return r*r;//return的积分常数,例如这里f(x*x)dx|[0,h]}double integrate(double a, double b, double h) { unsigned long steps = 1, it = 1; double V = h * (func(a, b, 0) + func(a, b, h)) / 2.0; double Vold; do { double t... 阅读全文
posted @ 2013-10-20 17:03 little_w 阅读(404) 评论(0) 推荐(0)