1181 数列分段1
难度:入门难度
题目类型:贪心
提交次数:2
涉及知识:模拟/贪心
题目描述
对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求。
输入输出格式
输入格式:
输入文件divide_a.in的第1行包含两个正整数N,M,表示了数列A[i]的长度与每段和的最大值,第2行包含N个空格隔开的非负整数A[i],如题目所述。
输出格式:
输出文件divide_a.out仅包含一个正整数,输出最少划分的段数。
代码:
1 #include<iostream> 2 using namespace std; 3 int a[100010]; 4 int main(){ 5 int n, m; 6 cin>>n>>m; 7 int i; 8 for(i = 0; i < n; i++) 9 cin>>a[i]; 10 int tot = 0, sum = 0; 11 for(i = 0; i < n; i++) 12 if(tot+a[i]<=m) 13 tot+=a[i]; 14 else{ 15 tot = a[i]; sum++; 16 } 17 if(tot>0) sum++; 18 cout<<sum; 19 return 0; 20 }
备注:
一道小小的水题,然而我……
处理最后一段用tot>0判断我愣是没想到啊啊啊。。我觉得这还挺巧妙的……(好吧挺弱智的),怎么着也给个普及-难度啊。。(脸没地搁)