暴力求解30pts,求助
查看原帖
暴力求解30pts,求助
913935
CloseAI楼主2023/10/20 19:21

先说思路,我枚举从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;

}
2023/10/20 19:21
加载中...