0
邓千陌
新手守护
新手守护
零分,请各位帮忙看下错在哪里了
#include <iostream>
#include <algorithm>
using namespace std;
int n, x; //总共n小时,道具有效时间x小时
long long p[30001]; //p[i] 第i小时进入密室的人数
bool boss[30001]; //boss[i] 第i小时NPC的状态
long long f[30001]; //f[i] 在第i个小时使用道具可通过的人数
void input(); //输入数据
int main() {
input();
for(int i = 0; i < x; ++i) //边界初始化:在第0时使用道具的效果
f[0] += boss[i] * p[i];
for(int i = 0; i <= n - x; ++i) //枚举时间
f[i] = f[i - 1] - boss[i - 1] * p[i - 1] + boss[i + x -1] * p[i + x -1];
// for(int i = 0; i <= n - x; ++i)
// cout << i << " - " << i + x - 1 << ":\t" << f[i] << endl;
int ans = 0;
for(int i = 0; i < n; ++i)
if(!boss[i])
ans += p[i];
ans += *max_element(f, f + n - x + 1);
cout << ans;
return 0;
}
void input() {
cin >> n;
for(int i = 0; i < n; ++i)
cin >> p[i];
for(int i = 0; i < n; ++i)
cin >> boss[i];
cin >> x;
}