zoukankan      html  css  js  c++  java
  • 毛毛虫——尺取算法

    何为尺取算法呢?我觉得成为毛毛虫算法更为贴切,因为这个算法操作对象是一个序列,算法过程好像一个毛毛虫有伸缩也有前进,就好比这样:

    。。。。。。额,妹子已经给我们很好的演示了这个算法的过程了。

    下面以一个题目为例来演示一下:

    Poj3061

    给长度为n的数组和一个整数m,求总和不小于m的连续子序列的最小长度

    输入

    n = 10,m = 15

    5 1 3 5 10 7 4 9 2 8

    输出

    2

    过程大致分为四步:

    1.初始化左右端点,即先找到一个满足条件的序列。

    2.在满足条件的基础上不断扩大右端点。

    3.如果第二步无法满足条件则终止,否则更新结果。

    4.扩大左端点,并且回到第二步。

     1 #include<stdio.h>
     2 #include<algorithm>
     3 using namespace std;
     4 int main()
     5 {
     6     int t,n,m,ans,minx,sum,i,j,w;
     7     int a[10010];
     8     scanf("%d",&t);
     9     while(t--)
    10     {
    11         scanf("%d%d",&n,&m);
    12         for(i=0;i<n;i++)
    13         {
    14             scanf("%d",&a[i]);
    15         }
    16         j=0;
    17         w=0;
    18         sum=0;
    19         ans=n+1;
    20         while(1)
    21         {
    22             while(j<n&&sum<m)
    23             {
    24                 sum=sum+a[j++];///先找到一个满足条件的序列,在满足条件的基础上不断扩大右端点
    25             }
    26             if(sum<m)
    27             {
    28                 break;
    29             }
    30             minx=j-w;
    31             ans=min(ans,minx);
    32             sum=sum-a[w];///扩大左端点
    33             w++;
    34         }
    35         if(ans==n+1)
    36         {
    37             printf("-1
    ");
    38         }
    39         else
    40         {
    41             printf("%d
    ",ans);
    42         }
    43     }
    44     return 0;
    45 }
  • 相关阅读:
    CentOS7设置开机自启动命令大全
    CentOS查看何人何时登陆用户
    CentOS显示设置时间命令- date
    CentOS系统命令
    CentOS系统中last命令的作用
    CentOS命令top下你不一定懂的cpu显示信息
    CentOS系统安装后的基础优化
    查看CentOS的网络带宽出口
    storm深入研究
    hadoop学习笔记之-hbase完全分布模式安装-5
  • 原文地址:https://www.cnblogs.com/wkfvawl/p/9016281.html
Copyright © 2011-2022 走看看