zoukankan      html  css  js  c++  java
  • 【贪心】数列分段Section I luogu-1181

    题目描述

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

    分析

    简单思考一下,首先这是一段连续的区间,所以一般是不能使用sort。
    如果要考虑贪心的话,我们只能采取最简单的方法,也就是每一段求一下,用一个tmp扫一下,如果可以将当前的数加入tmp中,那么就加进去,不行的话重新开一段区间。

    AC代码

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn=100005;
    int n,m;
    int a[maxn];
    inline int read(){
    	int w=0,X=0;char ch=0;
    	while (!isdigit(ch)) {w|=ch=='-';ch=getchar();}
    	while (isdigit(ch)) {X=(X<<1)+(X<<3)+(ch^48);ch=getchar();}
    	return w?-X:X;
    }
    int main(){
    	n=read(),m=read();
    	for (int i=1;i<=n;i++) a[i]=read();
    	int ans=0,tmp=0;
    	for (int i=1;i<=n;i++) {
    		if (tmp+a[i]>m) tmp=0,ans++;
    		tmp+=a[i];
    	}
    	if (tmp) ans++;
    	printf("%d
    ",ans);
    	return 0;
    }
    
    
    黎明的朝阳,会为苦难中最坚强的信念升起
  • 相关阅读:
    JavaScript获取查询字符串
    Struts2 验证码图片实例
    js函数重载
    js面向对象基础
    js上下文
    java克隆入门和深入
    js类型检查
    js闭包
    Phonegap移动开发:布局总结(一) 全局
    Python发送多附件邮件的方法
  • 原文地址:https://www.cnblogs.com/Dawn-Star/p/9647380.html
Copyright © 2011-2022 走看看