65 RE 玄关求调
查看原帖
65 RE 玄关求调
822746
baiyh楼主2025/7/18 18:33

RT

#include<bits/stdc++.h>
#define ll long long
using namespace std;
template<typename T>void read(T &x){
	int f=1;x=0;char c=getchar();
	for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
	for(;isdigit(c);c=getchar()) x=(x<<1)+(x<<3)+(c^48);
	x*=f;
}
const int maxn=20010;
const int INF=INT_MAX;
int n;
ll f[maxn][41][41];
ll l[maxn],r[maxn];
ll a[maxn],b[maxn],c[maxn];
ll dfs(ll u,ll x,ll y){
	if(u>=n) return c[u]*(a[u]+x)*(b[u]+y);
	if(f[u][x][y]!=f[0][0][0]) return f[u][x][y];
	return f[u][x][y]=min(dfs(l[u],x,y)+dfs(r[u],x,y+1),dfs(l[u],x+1,y)+dfs(r[u],x,y));
}
int main(){
	read(n);
	memset(f,63,sizeof(f));
	for(int i=1;i<n;i++){
		ll s,t;
		read(s);read(t);
		if(s>0) l[i]=s;
		else l[i]=n-1-s;
		if(t>0) r[i]=t;
		else r[i]=n-1-t;
	}
	for(int i=1;i<=n;i++){
		read(a[i+n-1]);read(b[i+n-1]);read(c[i+n-1]);
	}
	printf("%lld",dfs(1,0,0));
	return 0;
}    
2025/7/18 18:33
加载中...