2011年4月27日
摘要: 在奇数个数中找到重复一半以上的数 输入数据 1.必须全为奇数 不必考虑0 负数 2.必有一个数是重复出现一半以上的 3.数据量大 卡内存 属于大数据卡内存的题目 设一个结果变量res 并用cnt来筛选 最后的结果是能使cnt不为零的数View Code 1 #include<stdio.h> 2 int main() 3 { 4 long n,num,cnt,res; 5 while(EOF != scanf("%d",&n)) 6 { 7 cnt = 0; 8 while(n--) 9 {10 scanf("%d",&num 阅读全文
posted @ 2011-04-27 20:01 geeker 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 问题:给定由n个整数(可能为负整数)组成的序列e1,e2,…,en,以及一个正整数m,要求确定序列的m个不相交子段,使这m个子段的总和达到最大。分析:设b(i,j)表示数组e的前j项中i个子段和的最大值,且第i个子段含e[j](1£ i £m,i£ j £n)。以下称b(i, j)为“最后一个元素属于第i子段的j元素i子段问题”。则n个元素中求i个子段的最优值显然为:best(i, n) = Max{ b(i, j) } (i <= j <= n)计算b(i,j)的最优子结构为:b(i,j) = Max{ b(i, j-1) + e[j], 阅读全文
posted @ 2011-04-27 19:35 geeker 阅读(936) 评论(0) 推荐(0) 编辑
摘要: 《问题的引出》看下面一个例子,计算三个矩阵连乘{A1,A2,A3};维数分别为10*100 , 100*5 , 5*50按此顺序计算需要的次数((A1*A2)*A3):10X100X5+10X5X50=7500次按此顺序计算需要的次数(A1*(A2*A3)):10X5X50+10X100X50=75000次所以问题是:如何确定运算顺序,可以使计算量达到最小化。枚举显然不可,如果枚举的话,相当于一个“完全加括号问题”,次数为卡特兰数,卡特兰数指数增长,必然不行。《建立递归关系》子问题状态的建模(很关键):令m[i][j]表示第i个矩阵至第j个矩阵这段的最优解。显然如果i=j,则m[i][j]这段 阅读全文
posted @ 2011-04-27 18:10 geeker 阅读(32230) 评论(3) 推荐(3) 编辑