先说思路,我枚举从0到n的各个总代价,执行第一种操作,分成两个区间, 左边计算c操作的代价,右边计算b操作的代价。虽然知道大规模数据一定会 TLE,但数据量小的时候出现了WA;
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
const int N=5e5+1;
int n,a[N],b[N],bs[N],c[N],P[N];
int solve(int m) {
if(m==0)return a[n];
int l,r,mi=N;
for(int i=0; i<=n; i++) {
l=a[i];
r=bs[n]-bs[i];
for(int j=1; j<=m; j++){
if(P[j]<=i)l+=c[P[j]];
else r-=b[P[j]];
}
mi=min(r+l,mi);
}
return mi;
}
int main() {
cin>>n;
for(int i=1; i<=n; i++)cin>>a[i];
for(int i=1; i<=n; i++)cin>>b[i];
for(int i=1; i<=n; i++)
bs[i]=b[i]+bs[i-1];
for(int i=1; i<=n; i++)cin>>c[i];
int q,m;
cin>>q;
while(q--) {
cin>>m;
for(int i=1; i<=m; i++)
cin>>P[i];
cout<<solve(m)<<endl;
}
return 0;
}