题目
思路
思路是当第一站人数为0时,找出车上人数的最大值与最小值,最后对w进行遍历,只要最大值+遍历变量<=w并且最小值+遍历变量>=0,就可以。
AC代码
#include <cstdio>
#include <cmath>
using namespace std;
int n, w; //表示车站个数以及最大能容纳的人数
int arr[1010];//n最大为1000 多定义10个
int every_s_num[1010];//表示当车上没人时,每一个车站变换后的人数
int main() {
scanf("%d %d", &n, &w);
for (int i = 0; i < n; ++i) {
scanf("%d", &arr[i]);
}
int count = arr[0];
every_s_num[0] = count; //刚开始为arr[0]
for (int i = 1; i < n; ++i) {
count += arr[i]; //后面一直加
every_s_num[i] = count;
}
int max_ = -1, min_ = 1; //找出every_s_num的最大值max_与最小值min_
for (int i = 0; i < n; ++i) {
if (every_s_num[i] > max_)
max_ = every_s_num[i];
if (every_s_num[i] < min_)
min_ = every_s_num[i];
}
int sum = 0;
for (int i = 0; i <= w; ++i) {
if (i + max_ <= w && i + min_ >= 0) {
sum++;
}
}
printf("%d", sum);
}
后言
其实有时候算法没那么难~,思路放简单点。