关于贪心结论的证明
查看原帖
关于贪心结论的证明
667250
Xiphi楼主2023/10/16 14:49

我使用了 dp+贪心 的做法。贪心结论是,在 p_i 使用一操作是不劣的,求具体的证明。

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=500005;
int a[N],b[N],c[N],n,q,m,sum1[N],p[N],s[N],f[N],g[N];
void solve(){
	cin>>m;
	for(int i=1;i<=m;++i){
		cin>>p[i];
	}
	int ans=0;
	for(int i=1;i<=m;++i){
		f[i]=min(a[p[i]-1]+g[i-1],f[i-1]+s[p[i]-1]-s[p[i-1]]);
		g[i]=g[i-1]+c[p[i]];
	}
	cout<<min(g[m]+a[n],f[m]+s[n]-s[p[m]])<<'\n';
	for(int i=1;i<=m;++i) g[i]=f[i]=0;
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
	cin>>n;
	for(int i=1;i<=n;++i) cin>>a[i];
	for(int i=1;i<=n;++i) cin>>b[i],s[i]=s[i-1]+b[i];
	for(int i=1;i<=n;++i) cin>>c[i];
    for(int i=1;i<=n;++i) a[i]=min(a[i],a[i-1]+b[i]);
	cin>>q;
	while(q--){
		solve();
	}
	return 0;
}




2023/10/16 14:49
加载中...