zoukankan      html  css  js  c++  java
  • 洛谷P1181 数列分段Section1

    Description

    对于给定的一个长度为NN的正整数数列A_i,现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求。

    Input

    第1行包含两个正整数N,M,表示了数列A_i的长度与每段和的最大值,第2行包含N个空格隔开的非负整数A_i,如题目所述。

     

    Output


    一个正整数,输出最少划分的段数。


    分析:这个题也是标准的贪心问题,每个区段的合并只与当前有关,与前后都无关,显然贪心策略是让一个数字能尽可能的合并更多的数字。

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #define maxn 100005
    
    using namespace std;
    
    int a[maxn],ans,n,m;
    
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]); 
        for(int i=1;i<=n;i++)
        {
            int sum=0,j; ans++;
            for(j=i;j<=n;j++)
            {
                if(sum+a[j]>m) break;
                else sum+=a[j];
            }
            i=j-1;
        }
        printf("%d",ans);
        return 0;
    }
    View Code
  • 相关阅读:
    C# 从需要登录的网站上抓取数据
    mysql
    Fiddler抓取https设置详解(图文)
    Handlebars块级Helpers
    SQL优化技巧
    MyBatis持久层框架使用总结
    网页刷新页面方法小结
    史上最全的程序猿面试资料
    ActiveMQ开发与简介
    Lex使用指南
  • 原文地址:https://www.cnblogs.com/Hoyoak/p/11345737.html
Copyright © 2011-2022 走看看