求助80分

P1614 爱与愁的心痛

# 无所谓,我会出手~ ```cpp #include<iostream> #include<stdio.h> #include<math.h> #include<cstring> // 初始代码 #include<set> using namespace std; int main(){ int n = 0,m = 0,min = 3000; cin >> n >> m; int a[3500]; for(int i = 0;i < n;i ++){ cin >> a[i]; } for(int i = 0;i < n - m + 1;i ++){ int s = 0; for(int j = i;j <= i + m - 1;j ++){ s += a[j]; } if(i == 0){ min = s; }else{ if(min > s){ min = s; } } } cout << min << endl; } ```
by JTRAKM @ 2023-04-08 15:02:51


@[liyong5114](/user/917683) ```cpp if(m+i>n+1){ break; } ``` 你这里 `m+i` 不会被加上,因而 `m+i-1>=n` 都是合乎要求的右边界。如果最小区间就是最右边能取到的区间,那么你的答案显然大一些。 另外 `i` 的取值是可以预先算清楚的吧。 `int i=1;i<=n-m+1;i++`。 最后一个点是 `0 0`,输出是`0`,可以通过特判的方式解决。 一个测试人员进入酒吧要了 0 杯啤酒。
by Terrible @ 2023-04-08 15:08:00


@[JTRAKM](/user/942973) 啊这,我们有题解区,不需要你发能过的代码,另外有80分就可以去看其他人的公开记录了吧。![](//图.tk/1)
by Terrible @ 2023-04-08 15:09:14


洛谷有这个规定?
by rnfmabj5114 @ 2023-04-08 15:12:32


另外不能认为函数内的数组总是全 $0$ 的,所以 `for(int i=1;sum[i];i++)`并不妥当,要么把它开在全局区,要么对`sum[i]`进行初始化。
by Terrible @ 2023-04-08 15:23:00


|