[树形dp] Jzoj P1046 寻宝之旅

Description

探险队长凯因意外的弄到了一份黑暗森林的藏宝图,于是,探险队一行人便踏上了寻宝之旅,去寻找传说中的宝藏。
藏宝点分布在黑暗森林的各处,每个点有一个值,表示藏宝的价值。它们之间由一些小路相连,小路不会形成环,即两个宝藏点之间有且只有一条通路。探险队从其中的一点出发,每次他们可以留一个人在此点开采宝藏,也可以不留,然后其余的人可以分成若干队向这一点相邻的点走去。需要注意的是,如果他们把队伍分成两队或两队以上,就必须留一个人在当前点,提供联络和通讯,当然这个人也可以一边开采此地的宝藏。并且,为了节约时间,队伍在前往开采宝藏的过程中是不会走回头路的。现在你作为队长的助理,已经提供了这幅藏宝图,请你算出探险队所能开采的最大宝藏的价值。

Input

第一行有两个正整数n(1<=n<=100),表示藏宝点的个数,m(1<=m=100)表示探险队的人数。
第二行是n个不超过100的正整数,分别表示1到n每个点的宝藏价值。
接下来的n-1行,每行两个数,x和y(1<=x,y<=n,x<>y),表示藏宝点x,y之间有一条路,数据保证不会有重复的路出现。
假设一开始探险队在点1处。

Output

一个整数,表示探险队所能获得最大的宝藏价值。

Sample Input

5 3
1 3 7 2 8
1 2
2 3
1 4
4 5

 

 

题解

  • 又是一道树形dp,今天题做的要死了
  • 题目说:
  • 它们之间由一些小路相连,小路不会形成环,即两个宝藏点之间有且只有一条通路
  • 显然就是棵树
  • 容易得到设f[i][j]以i为根的子树,剩j的的最大价值
  • 那就有两种情况:
  • ①当前点不挖,直接跳
  • ②当前点留一个人挖,可以向下派j-1个人
  • 则有 f[i][j]=max(f[i][j],f[i][j-1-k]+f[son[i]][k]+v[i])
  • 那么我们不知道在f[i][j-1-k]中是否有v[i],如果有就算重了

  • 可以多定一个数组g,也可以多加一维,其实是一样的

  • g[i][j]表示 ]以i为根的子树,剩j,不挖i 的的最大价值

代码

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 using namespace std;
 5 int n,m,cnt,v[110],f[110][110],to[210],from[210],head[110],k[110],g[110][110];
 6 void insert(int x,int y) { to[++cnt]=y; from[cnt]=head[x]; head[x]=cnt; }
 7 void dp(int root,int fa)
 8 {
 9     f[root][1]=v[root];
10     for (int w=head[root];w;w=from[w])
11         if (to[w]!=fa)
12         {
13             dp(to[w],root);
14             for (int i=1;i<=m;i++) k[i]=max(f[root][i],f[to[w]][i]);
15             for (int i=1;i<=m;i++)
16                 for (int j=1;j<i;j++)
17                     k[i]=max(k[i],g[root][i-j-1]+f[to[w]][j]+v[root]);
18             for (int i=1;i<=m;i++) f[root][i]=k[i];
19             for (int i=1;i<=m;i++) k[i]=max(f[to[w]][i],g[root][i]);
20             for (int i=1;i<=m;i++)
21                 for (int j=1;j<i;j++)
22                     k[i]=max(k[i],g[root][i-j]+f[to[w]][j]);
23             for (int i=1;i<=m;i++) g[root][i]=k[i];
24         }
25 }
26 int main()
27 {
28     scanf("%d%d",&n,&m);
29     for (int i=1;i<=n;i++) scanf("%d",&v[i]);
30     for (int i=1;i<=n-1;i++)
31     {
32         int x,y;
33         scanf("%d%d",&x,&y);
34         insert(x,y); insert(y,x);
35     }
36     dp(1,0);
37     printf("%d",f[1][m]);
38     return 0;
39 }

 

转载于:https://www.cnblogs.com/Comfortable/p/9277479.html

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

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

相关文章

javascript --- 使用语法糖class定义函数

本文讨论的是通过class声明的函数,有什么特点,或者说是指向了哪里. class A() {} // A是一个类// 要看class声明的函数指向哪里,只需将其[[Prototype]]属性打印到控制台,下面看看A和它的原型对象的指向 // 注:[[Prototype]]属性通过__proto__访问 console.log(A.__proto__…

前端知识点整理收集(不定时更新~)二

目录 require() 加载文件机制 线程和进程 线程 单线程 Nodejs的线程与进程 网络模型 初识 TCP 协议 三次握手 I/O I/O 先修知识 阻塞与非阻塞 I/O 同步与异步 I/O Git 基础命令 分支操作 修改远程仓库地址 远程分支获取最新的版本到本地 拉取远程仓库指定分支…

SpringBoot零基础入门指南--搭建Springboot然后能够在浏览器返回数据

File->new Project 修改默认包名&#xff0c;根据自己的喜好修改 选择初始化需要导入的包&#xff0c;尽量不要一开始就导入很多&#xff0c;特别是数据库&#xff0c;不然启动可能会有问题&#xff0c;创建好的目录如下&#xff1a; 配置文件写在application.properties下&…

JavaScript算法相关

1. 排序 1.1.冒泡排序 每一轮比较&#xff0c;从左至右交换相邻&#xff0c;每轮结束&#xff0c;最后一个为最大下一轮&#xff0c;需要比较的个数 - 1 j < len - i (范围动态缩小)共 len - 1 轮比较 function bubbleSort(arr) {var len arr.length;for (var i 1; i &…

javascript --- 编程风格

字符串 const a foobar; const b foo${a}bar; // 此处是反引号(tab键上) const c foobar;解构赋值 const [first, second] arr;function getFullName({ firstName, lastName }) { }function processInput(input) {return { left, right, top, bottom }; } const { left…

$ - 字符串内插

$ 特殊字符将字符串文本标识为内插字符串。 内插字符串是可能包含内插表达式的字符串文本。 将内插字符串解析为结果字符串时&#xff0c;带有内插表达式的项会替换为表达式结果的字符串表示形式。 此功能在 C# 6 及该语言的更高版本中可用。 与使用字符串复合格式设置功能创建…

数据结构基础知识

排序 参考&#xff1a;https://www.bilibili.com/video/av38482633/?spm_id_fromtrigger_reload 目录 排序 插入排序 直接插入排序 折半排序 希尔排序 ​ 交换排序 冒泡排序 快速排序 选择排序 堆排序 流量单位计算 什么是计数排序 复杂度分析&#xff1a; 什…

linux中安装软件,查看、卸载已安装软件方法

各种主流Linux发行版都采用了某种形式的包管理系统&#xff08;PMS&#xff09;来控制软件和库的安装。 软件包存储在服务器上&#xff0c;可以利用本地Linux系统上的PMS工具通过互联网访问。这些服务器称为仓库。 由于Linux发行版众多,目前还没有统一的PMS标准工具。 这里分别…

html5 --- 使用javascript脚本控制媒体播放

H5中的标签(<audio…/> 和 <video…/>)对于JS中的HTMLAudioElement对象和HTMLVideoElement对象 对象有以下几个方法: play(): 播放 pause(): 暂停播放 load(): 重新装载音频、视频 canPlayType(type): 判断该元素可播放type类型的音频、视频 下面是一个简单的音乐…

在js中if条件为null/undefined/0/NaN/表达式时,统统被解释为false,此外均为true

Boolean 表达式 一个值为 true 或者 false 的表达式。如果需要&#xff0c;非 Boolean 表达式也可以被转换为 Boolean 值&#xff0c;但是要遵循下列规则&#xff1a; 所有的对象都被当作 true。当且仅当字符串为空时&#xff0c;该字符串被当作 false。null 和 undefined 被当…

ES6专题——整理自阮一峰老师的ECMAScript 6入门

这里我仅仅是记录了那些我认为值得注意的ES6知识点&#xff0c;详细版请挪步https://es6.ruanyifeng.com/#docs/let let和const命令 let声明的变量只在它所在的代码块有效。 var a []; for (let i 0; i < 10; i) {a[i] function () {console.log(i);}; } a[6](); // 6 …

开发测试比

1.服务器已经开启了CORS跨域支持 浏览器有同源策略限制&#xff1a;协议、域名、端口号其中无法向非同源地址发送ajax请求 跨域解决方法&#xff1a;JSONP&#xff08;只支持get不支持post&#xff09;&#xff0c;不是ajax 凡是有src属性的标签都有跨域能力 前端定义一个处理…

map函数用法详解

map函数是Python内置的高阶函数&#xff0c;它是一个典型的函数式编程例子。它的参数为: 一个函数function、一个或多个sequence。通过把函数function依次作用在sequence的每个元素上&#xff0c;得到一个新的sequence并返回。注意&#xff1a;map函数不改变原有的sequence&…

2018暑假集训测试六总结

拿到试题没几分钟&#xff0c;就有人说会做T1QAQ。第一题感觉似曾相识&#xff0c;其实不同。梳理出本质后发现有两个限制&#xff0c;便想用枚举递推来快速求解&#xff0c;发现要么是不会推&#xff0c;要么是时空超限&#xff0c;不会优化。期间也想过通过离线做&#xff0c…

css3 --- 使用媒体查询进行响应式布局

css3引入media,可以根据设备特性进行不同的布局, 本文展示的是根据不同屏幕的宽度进行不同的布局,代码如下: <!DOCTYPE html> <html> <head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><title> 针…

node项目正常启动后不能访问(防火墙未放行端口)

今天打开个人站点&#xff0c;发现登陆不了&#xff0c;原以为是pm2的问题&#xff0c;先停了pm2用node app.js的方式运行后端代码&#xff0c;项目能正常启动但是依然不能登陆。 1 检查ecs的安全组规则&#xff0c;node项目端口3000、8888是否放行 2 确认node正常运行 输入…

[转载]dbms_lob用法小结

http://blog.sina.com.cn/s/blog_713978a50100prkt.html CLOB里存的是2进制 判定长度 DBMS_LOB.GETLENGTH(col1)获取文本 DBMS_LOB.SUBSTR(col1,n,pos)DBMS_LOB.SUBSTR(col1,10,1)表示从第1个字节开始取出10个字节 DBMS_LOB.SUBSTR(CLOB_VAR,32767)表示截取CLOB变量保存的全…

javascript --- 利用节点关系访问HTML元素

<input type"button" value"父节点"onclick"change(curTarget.parentNode);" /><input type"button" value"第一个"onclick"change(curTarget.parentNode.firstChild.nextSibling);" /><input typ…

mysql中列属性

mysql列属性包括&#xff1a;NULL 、default、comment、primary key、unique key 一、NULL定义方式&#xff1a;NULL&#xff08;默认&#xff09;  NOT NULL 空属性有2个值&#xff0c;mysql数据库默认字段都是为null的&#xff0c;但是在实际开发过程中&#xff0c;尽可能保…