2 solutions
-
1
虽然这道题标签是贪心,但我觉得和贪心没有任何关系我用的是一个模拟的思想,从第一个一直算到最后一个,数和超过了就分段。
反正求的也是段数,别的啥啥都不用考虑( •̀ ω •́ )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; }
- 1
Information
- ID
- 7
- Time
- 1000ms
- Memory
- 512MiB
- Difficulty
- 7
- Tags
- # Submissions
- 187
- Accepted
- 36
- Uploaded By