55pts求助
查看原帖
55pts求助
374756
忘怜城羡楼主2023/10/20 21:23
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN=5e5+7;
int a[MAXN],b[MAXN],c[MAXN],p[MAXN],sum[MAXN],dp[MAXN],d[MAXN],sumc[MAXN],sumb[MAXN];
signed main()
{
	int n;
	scanf("%lld",&n);
	for(int i(1);i<=n;++i)
	scanf("%lld",&a[i]);
	for(int i(1);i<=n;++i)
	scanf("%lld",&b[i]);
	for(int i(1);i<=n;++i)
	scanf("%lld",&c[i]);
	for(int i(1);i<=n;++i)
	d[i]=min(d[i-1]+b[i],a[i]);
	for(int i(1);i<=n;++i)
	sumc[i]=sumc[i-1]+c[i];
	for(int i(1);i<=n;++i)
	sumb[i]=sumb[i-1]+b[i];
	int q;
	scanf("%lld",&q);
	while(q--)
	{
		int m;
		scanf("%lld",&m);
		for(int i(1);i<=m;++i)
		scanf("%lld",&p[i]);
		for(int i(1);i<=m;++i)
		sum[i]=sum[i-1]+c[p[i]];
		for(int i(1);i<=m-1;++i)
			dp[i]=min(min(d[p[i]-1]+sumc[p[i-1]],sumb[p[i]-1]-sumb[p[i-1]])+dp[i-1],min(d[p[i]-1]+sum[i-1],d[p[i]]+sum[i]));
		dp[m]=min(dp[m-1]+min(d[p[m]-1]+sumc[p[m-1]],sumb[p[m]-1]-sumb[p[m-1]])+(p[m]==n?0:min(d[n]+sumc[p[m]],sumb[n]-sumb[p[m]])),min(d[(p[m]==n?n-1:n)]+sum[(p[m]==n?m-1:m)],d[n]+sum[m]));
		printf("%lld\n",dp[m]);
	}
}
2023/10/20 21:23
加载中...