2 solutions

  • 1
    @ 2024-10-5 22:55:09

    虽然这道题标签是贪心,但我觉得和贪心没有任何关系

    我用的是一个模拟的思想,从第一个一直算到最后一个,数和超过了就分段

    反正求的也是段数,别的啥啥都不用考虑 ( •̀ ω •́ )y

    附上AC代码:

    #include <bits/stdc++.h>
    using namespace std;
    
    queue<int> q;//这是数列的存储容器
    int m,n;
    
    int main()
    {
    	cin >> n >> m;//数列个数和和最大值
    	int k;
    	for(int i = 1;i <= n;i++)
    	{
    		cin >> k;//队列输入不能直接用cin或者scanf
    		q.push(k);
    	}
    	int cnt = 0,sum = 0;//分别是划分段数,和每段的和(主要用来判断是否需要分段)
    	while(q.size() > 0)//开始模拟
    	{
    		if((m - sum) < q.front())//如果加完之后超过M
    		{
    			sum = 0;//下一段的和归零
    			cnt++;//段数+1
    		}
    		else//加上一个数
    		{
    			sum += q.front();
    			q.pop();
    		} 
    	}
    	cout << cnt + 1 << endl;//段数 = 分段数 + 1
    	return 0;
    }
    
    • -3
      @ 2023-6-3 10:44:33

      一道红题。

      由题意得,第 11 个数一定在某个集合里 。我们应该让这个集合囊括更多的数 。枚举即可 。

      • 1

      Information

      ID
      7
      Time
      1000ms
      Memory
      512MiB
      Difficulty
      7
      Tags
      # Submissions
      187
      Accepted
      36
      Uploaded By