当前位置:网站首页>【集训DAY3】石油储备计划【树形DP】
【集训DAY3】石油储备计划【树形DP】
2022-08-09 22:35:00 【VL——MOESR】

思路:
设f[i][j]表示当前i节点的子树,有j个是ave + 1的最小代价
转移方程就是 f [ x ] [ j ] = m i n ( f [ x ] [ j − k ] + f [ y ] [ k ] + a b s ( s [ y ] − ( s i z e [ y ] − k ) ∗ v a l − k ∗ ( v a l + 1 l l ) ) ∗ b [ i ] . w ) f[x][j] = min(f[x][j - k] + f[y][k] + abs(s[y] - (size[y] - k) * val - k * (val + 1ll)) * b[i].w) f[x][j]=min(f[x][j−k]+f[y][k]+abs(s[y]−(size[y]−k)∗val−k∗(val+1ll))∗b[i].w)
其中y是儿子,x是当前节点,s[y]是儿子子树的油桶数的数量,size[y]是儿子子树的大小,val是平均值,k是给儿子多少个val + 1
c o d e code code
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#define ll long long
using namespace std;
ll t, val, SIZE;
ll n, sum, size[110], s[110];
ll a[110], f[110][110];
ll tot, head[110], g[110];
struct node {
ll to, next, w;
}b[10010];
void add(ll x, ll y, ll z) {
b[++ tot] = (node) {
y, head[x], z };
head[x] = tot;
}
ll min(ll x, ll y) {
return x < y ? x : y; }
void dfs(ll x, ll fa) {
size[x] = 1, s[x] = a[x];
f[x][0] = f[x][1] = 0;
for(ll i = head[x]; i; i = b[i].next) {
ll y = b[i].to;
if(fa == y) continue;
dfs(y, x);
}
for(ll i = head[x]; i; i = b[i].next) {
ll y = b[i].to;
if(y == fa) continue;
memset(g, 0x7f7f7f7f, sizeof(g));
s[x] += s[y], size[x] += size[y];
for(ll j = 0; j <= size[x] && j <= SIZE; j ++)
for(ll k = 0; k <= j && k <= size[y]; k ++)
g[j] = min(g[j], f[x][j - k] + f[y][k] + abs(s[y] - (size[y] - k) * val - k * (val + 1ll)) * b[i].w);
for(ll j = 0; j <= SIZE && j <= size[x]; j ++)
f[x][j] = g[j];
}
}
int main() {
scanf("%lld", &t);
while(t --) {
scanf("%lld", &n);
for(ll i = 1; i <= n; i ++) {
scanf("%lld", &a[i]);
sum += a[i];
}
val = sum / n, SIZE = sum % n;
for(ll i = 1; i < n; i ++) {
ll x, y, z;
scanf("%lld%lld%lld", &x, &y, &z);
add(x, y, z), add(y, x, z);
}
memset(f, 0x7f7f7f7f, sizeof(f));
dfs(1, 0);
printf("%lld\n", f[1][SIZE]);
memset(head, 0, sizeof(head));
memset(s, 0, sizeof(s));
memset(size, 0, sizeof(size));
sum = 0;
}
return 0;
}
边栏推荐
- 多商户商城系统功能拆解24讲-平台端分销会员
- [Interface Test] Decoding the request body string of the requests library
- 正则表达式的实际使用
- H5实现分享功能
- The latest "Grain Academy Development Tutorial" in 2022: 10 - Front-end payment module
- 经济衰退即将来临前CIO控制成本的七种方法
- Basic operations of xlrd and xlsxwriter
- Click: 377. Combined Sum Ⅳ
- 【励志】名言警句
- ABAP中Collect的用法
猜你喜欢
随机推荐
带着昇腾去旅行:一日看尽金陵城里的AI胜景
力扣:279.完全平方数
【诗歌】最高级的惩罚就是沉默
友元类和友元函数
【面试高频题】可逐步优化的链表高频题
torch.distributed多卡/多GPU/分布式DPP(二)——torch.distributed.all_reduce(reduce_mean)&barrier&控制进程执行顺序&随机数种子
【JZOF】77按之字形打印二叉树
【JZOF】77 Print binary tree in zigzag
Sqlserver限制账户在哪些ip下才可以访问数据库
The latest "Grain Academy Development Tutorial" in 2022: 10 - Front-end payment module
[JZOF] 82 binary tree with a path of a certain value (1)
LeetCode952三部曲之三:再次优化(122ms -> 96ms,超51% -> 超91%)
ABAP中Collect的用法
YGG 经理人杯总决赛已圆满结束,来看看这份文字版总结!
Leetcode 701. 二叉搜索树中的插入操作
新增一地公布2022下半年软考报考时间
Filament-Material 绘制基本图形
【JZOF】82二叉树中和为某一值的路径(一)
Leetcode 235. 二叉搜索树的最近公共祖先
SRv6性能测量









