尺取算法

尺取算法

总结:就如之前例题的博客所说,又可以生动的叫它毛毛虫算法,其命名不是没有道理的,此算法的原理就如毛毛虫一般,一步一步的往后蠕动,多说无益,直接看例题。

描述冬日里的一抹暖阳总是能给人们留下深刻的记忆,人们喜爱冬天的太阳,就跟人们喜爱冬天的火锅一般。
寒冷的冬天总会让人想起火锅,最近小Z特别想去吃火锅,刚好某家转转火锅刚开业有活动,有n盘火锅围成一个圈,第一盘和最后一盘是相连的,每一盘火锅都有一个价值a[i],现在可以吃连续的m盘火锅,小Z想知道他所吃的那连续的m盘火锅的最大价值可以是多少?你能帮帮憨憨的小Z吗。
格式输入格式第一行数入两个整数n,m(1<=m<=n<=2000000),分别表示火锅的盘数和可以吃的连续的盘数
第二行输入n的数ai,分别表示每一盘火锅的价值
输出格式输出一个整数,表示连续m盘火锅的最大价值样例样例输入
Copy
5 3
6 1 2 5 3
样例输出
Copy
14
核心代码

    long long int sum=0,w=0,t=0,ans=0,p=m;//此题目需要long long ,注意范围,之前就错在这里。
    while(w<n)//我从0开始,直到w等于n,此时刚好走一圈,就把里面的所有的连续组合都走到了
    {
        if(t==0)
        {
            while(t<m)//这里是是计算前面m个的总和。
            {
                sum+=a[t++];
            }
        }
        else
        {
                    sum=sum+a[p++];//这里是每次往后加一个。
        }
        if(p>=n)
        p=0;//此处很关键,如果‘毛毛虫’的头到了最后,它就要网尾部走了,就是在试最后的与前面的相加。
        if(ans<sum)
            ans=sum;
        sum=sum-a[w++];//这里‘毛毛虫’长度是控制的,所一头往前走了,尾巴也要往前走
    }

我觉得吧,此题目的关键就在第一个while(w<n),多数时候网网会忽略,导致范围不全;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值