摘要: 求解最大连续子序列和问题,最直接的办法就是求出每个连续子序列的和,然后找出最大和即可,但这种算法的效率为O(n^2),代码如下,int LS(){ int Max=-999999999; for( int i=0;i<n;i++) { int sum=0; for( int j=i;j<n;j++) { sum+=a[j]; if(sum>Max) Max=sum; } } return Max;}这种算法适用于数据量比较小的情况。 在这种方法里, 有许多不必要的重合计算,而正是这些不必要的计算影响了程序的执行效率。为了提高算法的效率,尽可能的排除那些不必要的计算过程,可以采 阅读全文
posted @ 2011-04-14 20:35 聊聊IT那些事 阅读(2848) 评论(0) 推荐(0) 编辑
摘要: View Code #include"iostream"using namespace std;int main(){ int n; int a[10001]; int i; int j=0; while(cin>>n,n) { memset(a,0,sizeof(a)); int start=0,end=0; int k=0; int sum=0,Max=0; int count=0; int L=20000; for(i=0;i<n;i++) { cin>>a[i]; if(a[i]<0) count++; if(a[i]==0&am 阅读全文
posted @ 2011-04-14 18:59 聊聊IT那些事 阅读(430) 评论(0) 推荐(0) 编辑
摘要: 数塔问题是典型的dp问题之一,关键点:建立状态转移方程,这也是dp问题常见的一种思考方式(我不知道是不是所有的dp都是这种思考方式,看过的一些资料里面,建立状态转移方程很普遍,可能是自己碰到的面还不够广吧),而这里还有一个更为重要的思考点就是从哪儿开始建立?题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 求经过结点数字之和最大值的问题,用二维数组来表示其中结构也是dp里面常用的方法,我觉的用这种方法可能更易于去建立某种关系:非线性—>线性. 因为我觉的dp的思为方式跨度再大,它也的是采用线性关系来让许多看是间断的,不连续的点变成连续 阅读全文
posted @ 2011-04-14 17:04 聊聊IT那些事 阅读(534) 评论(0) 推荐(0) 编辑
摘要: 记得刚开始接触dp是数塔问题,那时,感觉dp很深奥,接受不了他的这种跨度比较大的思维方式,因为在这之前,可以说我从来来没有接触过这样的问题, 这种思维方式对我的惯性思维是一个很大的冲击,这也不得不使我重新转换自己的思维习惯,因为在我后来逐渐做dp这类题的时候,有些问题用一般方法是很难解决的,即便用一般方法模拟出来也是tlm。 后来,在对dp逐步的理解和应用过程当中,我感受到了其中的好处,也在慢慢转换着思考方式。一直在学,一直在思考,不同的阶段会遇到不同的问题,有的思考方式很难理解。特别是这种时候,就常常会使我陷入思维困境,可能一小时,一天,有时甚至好几天。到最后实在想不明白,就把问题搁置一边. 阅读全文
posted @ 2011-04-14 16:27 聊聊IT那些事 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2104思路分析:m和n互质即可。与hdu1222相同 http://acm.hdu.edu.cn/showproblem.php?pid=1222 阅读全文
posted @ 2011-04-14 10:00 聊聊IT那些事 阅读(251) 评论(0) 推荐(0) 编辑