CCF CSP 201909-5 城市规划

本文探讨了201909-5号CCF CSP问题,涉及一个具有循环特性的树形背包问题。问题的核心在于处理物品的循环依赖以及决策的循环影响,对解决此类问题的策略进行了深入分析。
摘要由CSDN通过智能技术生成

 有依赖的树形背包问题

第一维 循环物品

第二维 循环体积

第三维 循环决策

#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int N = 1e5+10, M = 5e5+10;
const int INF = 1e15;
int h[N], ep;
struct Edge{
	int to, nxt, w;
}e[M];
int n, m, K;
int du[N], vis[N], siz[N];
LL f[N][110];
void add(int a, int b,int c)
{
	e[ep].to = b, e[ep].w = c, e[ep].nxt = h[a], h[a] = ep ++;
}
void dfs(int u,int fa)
{
	for(int i = 1; i <= K; ++i) f[u][i] = INF;
	if(vis[u]) siz[u] = 1, f[u][1] = 0;
	for(int i = h[u]; ~i; i = e[i].nxt)
	{
		int to = e[i].to;
		LL w = e[i].w;
		if(to == fa) continue;
		dfs(to, u);
		siz[u] += siz[to];
		for(int j = min(siz[u], K); j; j --)
			for(int k = min(siz[to], j); k; k --)
				f[u][j] = min(f[u][j], f[u][j - k] + f[to][k] + w * (K - k) * k);
	}
}
int main()
{
	memset(h, -1, sizeof h);
	//freopen("1.t
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值