1 solutions

  • 1
    @ 2024-3-5 13:57:56

    说明

    这题因为服务器原因,我也没过(Fetched)。但我在洛谷AC立

    题意

    数列分段使每段和不超过给定值。

    死路

    不要以为这题放在分治与二分就用二分做。这样想过的乐子举手!

    思路

    我没有这种惯性施维,所以就没有这样想过。我一看这题,纯乐子,我数组都没用,直接一个个读入,加入总和去求好了。

    歹马

    我AC后写题解,才写的人机数组代码,代码不那么简洁,但是更好想,不宜错。(注释看正解)

    /*#include<iostream>
    using namespace std;
    int main(){
    	int	n,m;
    	cin>>n>>m;
    	int sum=0;
    	int now=0;
    	for(int	i=0;i<n;i++){
    		int a;
    		cin>>a;
    		if(now+a>m)
    			now=0,sum++;
    		now+=a;
    	}
    	cout<<sum+1;
    }
    */
    #include<iostream>
    using namespace std;
    int main(){
    	int n,m;
    	cin>>n>>m;
    	int a[n];
    	for(int i=0;i<n;i++)
    		cin>>a[i];
    	int sum=0,now=0;
    	for(int i=0;i<n;i++){
    		if(now+a[i]>m)
    			sum++,now=0;
    		now+=a[i];
    	}
    	cout<<sum+1;
    }
    

    代码

    #include<iostream>
    using namespace std;
    int main(){
    	int	n,m;
    	cin>>n>>m;
    	int sum=0;//段数和 
    	int now=0;//现阶段和 
    	for(int	i=0;i<n;i++){
    		int a;
    		cin>>a;
    		if(now+a>m)//如果溢出 
    			now=0,sum++;//分段,阶段和重置 
    		now+=a;
    	}
    	cout<<sum+1; 
    }
    

    提示

    因为计算时最后一段不会被分段,所以结果要加一(因为最后一段结束不会因为if语句sum++,很好想)。

  • 1

Information

ID
78
Time
1000ms
Memory
128MiB
Difficulty
6
Tags
# Submissions
21
Accepted
11
Uploaded By