zoukankan      html  css  js  c++  java
  • 1428:数列分段

    1428:数列分段

    题解

    注意数列分段的题目不可以打乱顺序

    原数列是[ 4  2  4  5  1 ]

    划分为三段吼是 [ 4  2 ][ 4 ][ 5  1 ]

    我们先从第一个开始,当前状态标记为 s ,一开始,s=a[1]

    那么接下来从2开始枚举到n

    如果当前状态加上一个数字仍然不超过最大限度m 的话,那就把这个数字加入当前状态,也就是不再开一个段数,否则就要新开一段了,同时重置状态s=a[ i ]

    最后ans要自加,因为一开始的第一个没有算进去

    代码

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<cstring>
    #include<string>
    
    using namespace std;
    
    int n,m,ans,s;
    int a[100001];
    
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
          scanf("%d",&a[i]);
        
        s=a[n];
        for(int i=n-1;i>=1;i--)
        {
            if(s+a[i]<=m) s+=a[i];
            else
            {
                ans++;
                s=a[i];
            }
        }
        ans++;
        printf("%d",ans);
        return 0;
    }
  • 相关阅读:
    spring
    SpringMVC 配置与使用
    基本MVC2模式创建新闻网站
    EL表达式
    JavaBeans介绍
    JSP简介
    Cookie与Session的异同
    过滤器的使用
    session的使用
    最长回文子串
  • 原文地址:https://www.cnblogs.com/xiaoyezi-wink/p/10989514.html
Copyright © 2011-2022 走看看