P1270 “访问”美术馆

news/2024/9/21 8:38:37/文章来源:https://www.cnblogs.com/Yuan-Jiawei/p/18354171

题意

image

注意:

  1. 要预留一秒的时间!!!不然你就 80 pts 分了。
  2. 小偷要回到大门。

思路

定义 \(f_{i, j}\) 表示到在 \(i\) 的子树内拿 \(j\) 幅画。

那么我们可以枚举 \(f_{to, k}\) 表示在儿子结点拿 \(k\),那么总共为 \(f_{u, j + k} = min(f_{u, j + k}, f_{u, j} + f_{to, k} + 2w)\)

我们为了防止 \(f\) 被反复利用,变成了左脚踩右脚上天,所以我们每次转移的时候定义临时数组,然后后面再 copy 回来。

代码

#include <bits/stdc++.h>using namespace std;const int N = 810, M = 2010, INF = 0x3f3f3f3f;struct edge {int to, next, w;
} e[N];int head[N], idx = 1;void add(int u, int v, int w) {idx++, e[idx].to = v, e[idx].w = w, e[idx].next = head[u], head[u] = idx;
}int atime, n, cnt[N], sum;void input(int u) {int w, c;cin >> w >> c;add(u, ++n, w);int rt = n;if (!c) {input(rt);input(rt);}else {cnt[n] = c;sum += c;}
}int f[N][M], g[M];void dfs(int u, int fa) {if (cnt[u]) {for (int j = 0; j <= cnt[u]; j++) {f[u][j] = j * 5;}return;}f[u][0] = 0;for (int i = head[u]; i; i = e[i].next) {int to = e[i].to;if (to == fa) continue;dfs(to, u);memcpy(g, f[u], sizeof(g));for (int j = 0; j <= sum; j++) {for (int k = 1; j + k <= sum; k++) {g[j + k] = min(g[j + k], f[u][j] + f[to][k] + 2 * e[i].w);}}memcpy(f[u], g, sizeof(g));}
}int main() {	ios::sync_with_stdio(false);cin.tie(nullptr);cin >> atime;input(++n);memset(f, 0x3f, sizeof(f));dfs(1, 0);int lst = 0;for (int i = 0; i <= sum; i++) {if (f[1][i] < atime) {lst = i;}}cout << lst << '\n';return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/781494.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab求解非线性规划

目录前言一、非线性规划的标准型二、fmincon函数1.目标函数--function f = fun(x)2.非线性约束函数--[c,ceq] = nonlfun(x)3.设置求解方法--option三、matlab求解非线性规划的实例与可能遇到的问题1.初值问题2.算法问题(1)内点法求解(2)SQP算法求解(3)active set算法求解…

genieacs安装

linux环境:ubuntu18.041. 安装node.js16.14wget https://nodejs.org/dist/v16.14.2/node-v16.14.2-linux-x64.tar.xz tar -Jxvf node-v16.14.2-linux-x64.tar.xz sudo mv node-v16.14.2-linux-x64/ /opt/ sudo ln -s /opt/node-v16.14.2-linux-x64/bin/node /usr/local/bin/ …

Scanner的进阶使用——基础计算

通过Scanner,可以将我们输入的数字进行计算从而反映出和以及平均数 1.定义两个变量,分别是输入的整数以及总数的和2.建立一个扫描器3.使用while关键字进行循环,在符合条件下(输入的是数字)可以一直进行计算过程4.设置电脑接收数据5.设置我们输入的次数以及数字的总和6.输出…

jUC中的锁

在JUC中 可以使用synchronized关键字进行加锁 如下所示 Object object = new Object(); synchronized (object){ // TODO }synchronized关键字所加的锁是逐步升级的,顺序是 无锁-> 偏向锁 -> 轻量级锁 -> 重量级锁、随着锁等级的提高,所带来的消耗也会越…

Scanner的进阶使用——数字的输入

1.用Scanner输入数字(整数和小数) 1.定义一个整数变量2.建立扫描器3.使用if4.建立电脑接收数据5.设置else(那么)语法6.关闭Scanner

电磁学 数学储备

以新概念物理的附录为主要参考,总结了电磁学的部分数学基础。A 矢量的乘积和对称性 \[\def\ooint{{\bigcirc}\kern-11.5pt{\int}\kern-6.5pt{\int}} \def\oooint{{\bigcirc}\kern-12.3pt{\int}\kern-7pt{\int}\kern-7pt{\int}} \]矢量的标积 设\(\boldsymbol{A}\)和\(\boldsym…

面试题:64匹马,8个赛道,最少跑几次可以找出前四名?

面试题:64匹马,8个赛道,最少跑几次可以找出前四名? 一、常规非最优解法 均分比赛,高度为4的二叉树。次数为8+4+2+1=15 二、最优解综上,最少10次,最多11次。

华为pura70pro+ vs VIVO x100s pro

华为pura70pro+ vs VIVO x100s pro 简介 最近主力机不是很给力,老是发热卡顿,影响我正常的使用,于是有了换手机的想法。作为数码爱好者,有着使不完的折腾劲,我从三千块多的手机研究到了七八千的手机,从红米到小米,从oppo、vivo到华为等等等等研究了个遍。在五花八门的手…

多元/多维高斯/正态分布概率密度函数推导 (Derivation of the Multivariate/Multidimensional Normal/Gaussian Density)

各种维度正态分布公式: 一维正态分布二维正态分布/多维正态分布各向同性正态分布 注:即方差都是一样的,均值不一样,方差的值可以单独用标量表示。 多元/多维高斯/正态分布概率密度函数推导 (Derivation of the Multivariate/Multidimensional Normal/Gaussian Density) 作者…

痞子衡嵌入式:探析i.MXRT1050在GPIO上增加RC延时电路后导致边沿中断误触发问题(上篇)

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是i.MXRT1050在GPIO上增加RC延时电路后导致边沿中断误触发问题探析。前段时间有一个 RT1052 客户反馈了一个有趣的问题,他们设计得是一个带 LCD 屏交互的应用,应用以官方 SDK 里的 lvgl_demo_widgets_bm 例程…

【书生浦语大模型实战营学习笔记】第二课 8G 显存玩转书生大模型 Demo

任务一:使用 Cli Demo 完成 InternLM2-Chat-1.8B 模型的部署,并生成 300 字小故事,记录复现过程并截图。配置好预置环境:300 字小故事: