【CSU - 1980 】不堪重负的树(树上区间dp)

题干:

小X非常喜欢树,然后他生成了一个大森林给自己玩。
玩着玩着,小X陷入了沉思。

  • 一棵树由N个节点组成,编号为i的节点有一个价值Wi。
  • 假设从树根出发前往第i个节点(可能是树根自己),一共需要经过Di个节点(包括起点和终点),那么这个节点对这棵树产生的负担就是Di与Wi的乘积。
  • 对于一棵树而言,这棵树的负担值为所有节点对它产生的负担之和。

小X学习了dfs,如果他知道树的结构,他当然可以很容易地算出树的负担值。可是现在沉思中的小X并不知道树的结构形态,他只知道一棵二叉树的中序遍历以及每个节点的价值,那么这棵二叉树可能的最小负担值是多少呢?

Input

第一行为一个正整数T(T≤20)表示数据组数。
每组数据包括三行。
第一行为一个正整数N(N≤200)。
第二行为N个正整数Wi(Wi≤108),表示编号为i的节点的价值。
第三行为N个正整数Pi(Pi≤N),为一个1~N的排列,表示二叉树的中序遍历结果。

Output

对于每组数据,输出一行一个正整数,表示这棵树可能的最小负担值。

Sample Input

2
4
1 2 3 4
1 2 3 4
7
1 1 1 1 1 1 1
4 2 3 5 7 1 6

Sample Output

18
17

Hint

对于第一个样例,树根为3,3的左儿子是2,3的右儿子是4,2的左儿子是1,这样构成的树可以达到最小负担。
对于第二个样例,对应的满二叉树可以达到最小负担。

题目大意:

给出一颗二叉树的中序遍历以及每一个节点的价值,求一棵最小负担值的树。那一句:“可能是树根自己”,的意思是,根节点的负担就是自身的价值。

解题报告:

  首先我们知道任给一个中序遍历序列,可以组成的树有多种,而如何把这棵树划分开呢?就是看根节点是哪一棵。从而把序列分成左右两棵子树的合并,依次分解的最优解问题,考虑区间dp。

   其次就是考虑两棵子树如何合并的问题,其实也很简单,无非就是让这两棵子树的权值多加一遍,顺便加一遍新的根节点的权值,换句话说,也就是对应中序遍历序列的区间和,这一点我们可以用前缀和O1预处理出来,然后转移就ok了。

AC代码:

#include<cstdio>
#include <assert.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define fi first
#define se second
#define pb push_back
#define pm make_pair
using namespace std;
const int MAX = 2e2 + 6;
const ll INF = 0x3f3f;
ll w[MAX],p[MAX],val[MAX],sum[MAX];
ll dp[MAX][MAX];
int main()
{int t,n;cin>>t;while(t--) {scanf("%d",&n);memset(sum,0,sizeof sum);memset(dp,INF,sizeof dp);for(int i = 1; i<=n; i++) scanf("%lld",w+i);for(int i = 1; i<=n; i++) scanf("%lld",p+i);for(int i = 1; i<=n; i++) val[i] = w[p[i]],sum[i] = sum[i-1] + val[i],dp[i][i]=val[i];for(int len = 2; len <= n; len++) {for(int l = 1; l+len-1 <= n; l++) {int r = l + len - 1;dp[l][r]=min(dp[l+1][r],dp[l][r-1])+sum[r]-sum[l-1];for(int k = l+1; k<r; k++) {dp[l][r] = min(dp[l][r],dp[l][k-1] + dp[k+1][r] + sum[r] - sum[l-1]);}}}printf("%lld\n",dp[1][n]);} return 0 ;} 

 

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

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

相关文章

linux windows 域,linux加入windows域之完美解决方案

《linux加入windows域之完美解决方案》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《linux加入windows域之完美解决方案(10页珍藏版)》请在人人文库网上搜索。1、linux加入windows域的理想方案原文来源&#xff1a; http:/rainbird.blog.51cto.com/笔者最近几天正在…

【蓝桥杯官网试题 - 算法训练 】K好数(线性dp与优化)

题干&#xff1a; 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字&#xff0c;那么我们就说这个数是K好数。求L位K进制数中K好数的数目。例如K 4&#xff0c;L 2的时候&#xff0c;所有K好数为11、13、20、22、30、31、33 共7个。由于这个数目很大…

arm-linux配置dhcp自动获取ip地址,ARM-Linux配置DHCP自动获取IP地址

备注&#xff1a;内核版本&#xff1a;2.6.30.9busybox版本&#xff1a;1.15.2PC Linux和开发板Linux的工作用户&#xff1a;root1. 配置内核&#xff1a;[*] Networking support --->Networking options --->Packet socketUnix domain sockets[*] TCP/IP networking[*…

【CodeForces - 897D】Ithea Plays With Chtholly (交互题型,贪心,思维构造,题目信息)

题目大意&#xff1a; This is an interactive problem. Refer to the Interaction section below for better understanding. Ithea and Chtholly want to play a game in order to determine who can use the kitchen tonight. Initially, Ithea puts n clear sheets of pa…

红帽子linux生效环境变量,RedHat Linux 5无法使用ifconfig的解决方法

ifconfig是Linux显示网络设备的命令&#xff0c;能够设置网络设备的状态&#xff0c;但在RedHat Linux 5系统中&#xff0c;有时会遇到ifconfig命令无法使用的情况&#xff0c;下面小编就给大家介绍下RedHat Linux 5无法使用ifconfig命令的解决方法。一起去看看吧&#xff01;在…

关于交互题---Idleness limit exceeded(codeforces)

Idleness limit exceeded的中文&#xff1a;懒惰超过限制。----来自有道翻译 大概意思是在该输出的情况下没有输出数据 比如这个&#xff1a; 而且一般都会提醒你&#xff1a;&#xff08;在每条输出之后加&#xff09; After outputting each line, dont forget to flush t…

Linux如何搭建服务器eb,Linux下CRMEB环境搭建

环境准备:PHP7.0.33MySQL5.7Apache2.4PHP环境安装:sudo apt-get install php-pear php7.0-cli php7.0-common php7.0-curl \php7.0-dev php7.0-fpm php7.0-json php7.0-mbstring php7.0-mcrypt \php7.0-mysql php7.0-opcache php7.0-zip php7.0-intl php7.0-gd php7.0-xmlMySQL…

【EOJ Monthly 2019.02 - A】回收卫星(交互题型,二分)

题干&#xff1a; 单测试点时限: 1.0 秒 内存限制: 256 MB “这个世上没有无用的齿轮&#xff0c;也只有齿轮本身能决定自己的用途。” 就像太空中的卫星&#xff0c;虽然不计其数&#xff0c;但都各司其职。 但没有一个东西是能够永远无损的。为了便于回收及修理&#xf…

windows 调用linux .a lib,动态链接库及静态链接库(windows下的.dll .lib和linux下的.so .a)...

动态链接库及静态链接库(windows下的.dll .lib和linux下的.so .a) 库有动态与静态两种&#xff0c;动态通常用.so为后缀&#xff0c;静态用.a为后缀。例如&#xff1a;libhello.so libhello.a 为了在同一系统中使用不同版本的库&#xff0c;可以在库文件名后加上版本号为后缀,例…

【EOJ Monthly 2019.02 - B】解题(思维,抽屉原理,暴力,模运算,优化,tricks)

题干&#xff1a; 单测试点时限: 2.0 秒 内存限制: 1024 MB “我把房门上锁&#xff0c;并非为了不让她进去&#xff0c;而是为了防止自己逃到她身边”。 她又被数学难住了。QQ 小方当然是不会对女生说”不”的。 她的数学题是这样的&#xff0c;她得到了一个十进制大整数…

linux socket ip层配置,Linux下Socket通信(TCP实现)

近期在做的项目中&#xff0c;涉及到了进程间数据传输&#xff0c;系统的原本实现是通过管道&#xff0c;但是原有的实现中两个进程是在同一台机器&#xff0c;而且两个进程的关系为父子关系&#xff0c;而我们要做的是将其中一个进程移植到服务器上&#xff0c;因此两个进程要…

【EOJ Monthly 2019.02 - D】进制转换(思维,取模,高精度大数)

题干&#xff1a; 单测试点时限: 2.0 秒 内存限制: 256 MB “他觉得一个人奋斗更轻松自在。跟没有干劲的人在一起厮混&#xff0c;只会徒增压力。” QQ 小方决定一个人研究研究进制转换。 很快&#xff0c;QQ 小方就遇到问题了。他现在想知道在十进制范围 [l,r] 内有多少整…

linux i2c触摸屏驱动程序,触摸屏i2c设备和驱动的创建流程及方法

添加i2c设备的流程&#xff1a;1. 初始化 i2c_board_info 结构信息 和 i2c_driver 结构//设备驱动结构体static struct i2c_driver goodix_ts_driver {.probe goodix_ts_probe,.remove goodix_ts_remove,#ifndef CONFIG_HAS_EARLYSUSPEND.suspend goodix_ts_su…

【EOJ Monthly 2019.02 - E】中位数(二分 ,中位数 ,−1/1变换,dp求解DAG最长路)

题干&#xff1a; E. 中位数 单测试点时限: 10.0 秒 内存限制: 256 MB “你的地图是一张白纸&#xff0c;所以即使想决定目的地&#xff0c;也不知道路在哪里。” QQ 小方最近在自学图论。他突然想出了一个有趣的问题&#xff1a; 一张由 n 个点&#xff0c;m 条边构成的…

linux桌面变成黑白,用虚拟机装了linux后开启为什么界面是黑色的呢?

20寸显示器的标准分辨率是1680*1050进入到/boot/grub/目录下&#xff0c;然后就可以看到里面有个名为menu.lst的文件&#xff0c;用vim将其打开&#xff0c;可以看到以下内容&#xff1a;# grub.conf generated by anaconda## Note that you do not have to rerun grub after m…

【EOJ Monthly 2019.01 - E】唐纳德先生与假骰子(假概率问题)

题干&#xff1a; 单测试点时限: 6.0 秒 内存限制: 1024 MB 嗨&#xff0c;唐纳德先生又来了。 他又带了一枚假骰子&#xff0c;这个骰子的各个面的点数依然是 1,2,3,4,5,6 &#xff0c;但是六个面向上的概率却不一定都是 1/6 &#xff0c;而变成了 p1,p2,p3,p4,p5,p6 。 …

linux 编译安装picocom,Linux pico命令

Linux pico命令Linux pico命令用于编辑文字文件。pico是个简单易用、以显示导向为主的文字编辑程序&#xff0c;它伴随着处理电子邮件和新闻组的程序pine而来。语法pico [-bdefghjkmqtvwxz][-n][-o][-r][-s][][文件]参数说明&#xff1a;-b 开启置换的功能。-d 开启删除的功能。…

【Hihocoder - offer编程练习赛93 套题题解】交错01串(贪心,暴力)方格矩阵高度(模拟)数对(STLmultiset)修整土地(网络流)

A&#xff1a; 题干&#xff1a; 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi要将一个01串S传输给小Ho&#xff0c;由于S非常长&#xff0c;所以小Hi决定用长度为N的2个数组A [A1, A2, ..., AN]和B [B1, B2, ..., BN]表示S。 具体来讲&#xff0c;是…

linux防火墙配置连接atlas,ATLAS在ubuntu下的安装使用

1, 根据atlas的安装文档, 首先要switch off cpu throttling.在Ubuntu系统上要首先安装cpufrequtils和cpufreqd这两个包, 也许还要安装powernowd包,然后执行sudo /usr/bin/cpufreq-selector –g. 不过幸运的是, 我在server上安装的时候发现cputhrottling已经disable了(否则在con…

【CodeForces - 545 ABCDE套题训练题解】贪心, 构造,模拟,dp,最短路树(Dijkstra+变形)

A&#xff1a; 题干&#xff1a; Input The first line contains integer n (1 ≤ n ≤ 100) — the number of cars. Each of the next n lines contains n space-separated integers that determine matrix A. It is guaranteed that on the main diagonal there ar…