【BZOJ4254】Aerial Tramway 树形DP

【BZOJ4254】Aerial Tramway

题意:给你一座山上n点的坐标,让你在山里建m条缆车,要求缆车两端的高度必须相等,且中间经过的点的高度都小于缆车的高度。并且不能存在一个点位于至少k条缆车的下方。求缆车的最大总长度。

n,m<=200,k<=10。

题解:这么神奇的题面居然有人能想到要用树形DP。。。

先枚举所有可能的缆车,然后暴力得出这些缆车的关系。因为上面的缆车一定比它下面的缆车长,所以这形成了一个树形结构,我们建树跑树形DP。

用f[x][a][b]表示x的子树中已经减了y个缆车,且一个点最多位于k条缆车下方,的最大总长度。转移时是惯用的树形背包套路,然后用前缀最大值优化一下即可。时间复杂度O(n*m*k)。

 

#include <cstdio>
#include <cstring>
#include <iostream>
#include <vector>
using namespace std;
int T,n,m,K,tot,ans,cas;
int x[210],y[210],v[210],bel[210],siz[210],g[210][15],f[210][210][15],d[210];
vector<int> ch[210];
inline int rd()
{int ret=0,f=1;	char gc=getchar();while(gc<'0'||gc>'9')	{if(gc=='-')	f=-f;	gc=getchar();}while(gc>='0'&&gc<='9')	ret=ret*10+gc-'0',gc=getchar();return ret*f;
}
void dfs(int x)
{siz[x]=1;int i,j,k,l,y;for(l=0;l<=K;l++)	f[x][0][l]=0;for(i=0;i<(int)ch[x].size();i++){y=ch[x][i],dfs(y);memcpy(g,f[x],sizeof(f[x]));for(j=0;j<=siz[x]&&j<=m;j++)	for(k=0;k<=siz[y]&&j+k<=m;k++)	for(l=0;l<=K;l++)g[j+k][l]=max(g[j+k][l],f[x][j][l]+f[y][k][l]);siz[x]+=siz[y];for(j=0;j<=siz[x]&&j<=m;j++)	for(l=1;l<=K;l++)	f[x][j][l]=max(g[j][l],f[x][j][l-1]);}for(j=min(m,siz[x]);j>=1;j--)	for(l=1;l<=K;l++){f[x][j][l]=max(f[x][j][l],f[x][j-1][l-1]+v[x]);f[x][j][l]=max(f[x][j][l],f[x][j][l-1]);}ans=max(ans,f[x][m][K]);
}
void work()
{tot=0,K--;int i,j;for(i=1;i<=n;i++)	x[i]=rd(),y[i]=rd(),ch[i].clear(),bel[i]=0;for(i=1;i<=n;i++){for(j=i-1;j>=1;j--){if(y[j]>y[i])	break;if(y[j]==y[i]){bel[i]=++tot,v[tot]=x[i]-x[j],d[tot]=0;break;}}if(y[j]==y[i]&&bel[i])	for(j++;j<i;j++)	if(y[j]<y[i]&&bel[j]&&!d[bel[j]])d[bel[j]]=1,ch[bel[i]].push_back(bel[j]);}memset(f,0xc0,sizeof(f));v[++tot]=-1<<20;for(i=1;i<tot;i++)	if(!d[i])	ch[tot].push_back(i);ans=-1,dfs(tot);printf("%d\n",ans);
}
int main()
{while(scanf("%d%d%d",&n,&m,&K)!=EOF){printf("Case %d: ",++cas);work();}return 0;
}//14 3 3 1 8 2 6 3 4 4 6 5 3 6 4 7 1 8 4 9 6 10 4 11 6 12 5 13 6 14 8 14 3 2 1 8 2 6 3 4 4 6 5 3 6 4 7 1 8 4 9 6 10 4 11 6 12 5 13 6 14 8 

 

转载于:https://www.cnblogs.com/CQzhangyu/p/7749466.html

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

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

相关文章

C# 读取保存App.config配置文件的完整源码参考

最近出差在北京做一个小项目&#xff0c;项目里需要读取配置文件的小功能&#xff0c;觉得挺有参考意义的就把代码发上来给大家参考一下。我们选择了直接用微软的读取配置文件的方法。 这个是程序的运行设计效果&#xff0c;就是把这些参数可以进行灵活设置&#xff0c;灵活保存…

TensorFlow 简介

TensorFlow介绍 Tagline&#xff1a;An open-source software library for Machine Intelligence.Definition&#xff1a;TensorFlow TM is an open source software library fornumerical computation using data flow graphs.GitHub&#xff1a;https://github.com/tensorfl…

webbrowser设置为相应的IE版本

注册表路径&#xff1a; HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION 或者HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION 究竟选择哪一个…

jmeter压力测试_用Jmeter实现对接口的压力测试

一、多个真实用户对接口的压力测试1. 获取多个真实用户的token的两种方法&#xff1a;1)第一种&#xff1a;让开发帮忙生成多个token(多个用户账户生成的token)&#xff0c;导出为csv格式的文件(以下步骤均以该方法为基础)2)第二种&#xff1a;自己设置多个用户账户和密码&…

程序员成长之路(转)

什么时候才能成为一个专业程序员呢&#xff1f;三年还是五年工作经验&#xff1f;其实不用的&#xff0c;你马上就可以了&#xff0c;我没有骗你&#xff0c;因为专业程序员与业余程序员的区别主要在于一种态度&#xff0c;如果缺乏这种态度&#xff0c;拥有十年工作经验也还是…

嵌入式开发——PWM高级定时器

学习目标 加强掌握PWM开发流程理解定时器与通道的关系掌握多通道配置策略掌握互补PWM配置策略掌握定时器查询方式掌握代码抽取优化策略掌握PWM调试方式学习内容 需求 点亮8个灯,采用pwm的方式。 定时器 通道 <

解决虚拟机时间引起的奇怪问题

一直使用得好好的虚拟机最近出了一个奇怪问题在虚拟机装好的lamp在客户端访问phpmyadmin的时候,使用firefox登录没问题,但是使用IE不行总是停留在登录的界面,而且没有提供任何的出错信息,就连在apache的日志里面也看不到.注意到同样访问的时候,在IE上显示的转向的url是[url]htt…

TensorFlow 基本操作

Tensorflow基本概念 图(Graph):图描述了计算的过程&#xff0c;TensorFlow使用图来表示计算任务。张量(Tensor):TensorFlow使用tensor表示数据。每个Tensor是一个类型化的多维数组。操作(op):图中的节点被称为op(opearation的缩写)&#xff0c;一个op获得/输入0个或多个Tensor…

03_zookeeper伪集群安装

一句话说明白&#xff1a;在1台机器上模拟多台机器&#xff0c;对外提供服务 在理解zookeeper集群安装方法的基础上&#xff0c;本文描述如何将1个机器模拟为3个节点的zookeeper集群&#xff0c;建议先参考阅读本文的前一期 zookeeper伪集群安装总结 在本机上通过复制的方式&am…

python合成语音_MicroPython动手做(25)——语音合成与语音识别

6、AB按键切换语言合成项目[mw_shl_codepython,true]#MicroPython动手做(25)——语音合成与语音识别#AB按键切换语言合成项目from mpython import *import networkimport timeimport ntptimefrom xunfei import *import audiomy_wifi wifi()my_wifi.connectWiFi("zh"…

专访谷歌CEO:像对待家人一样对待员工

导语&#xff1a;《财富》近日公布了“2012年度美国100家最适宜工作的公司”榜单&#xff0c;谷歌当选冠军。即将于2月6日出版的美国《财富》杂志印刷版将刊登对谷歌CEO拉里佩奇(Larry Page)的专访&#xff0c;对谷歌的工作环境进行了介绍。 以下为采访概要&#xff1a; 问&a…

TensorFlow 分布式

一、简介 使用单台机器或者单个GPU/CPU来进行模型训练&#xff0c;训练速度会受资源的影响&#xff0c;因为毕竟单个的设备的计算能力和存储能力具有一定的上限的&#xff0c;针对这个问题&#xff0c;TensorFlow支持分布式模型运算&#xff0c;支持多机器、多GPU、多CPU各种模…

第五周测试

---恢复内容开始--- 一 视频知识 1 linux系统下如何区分内核态与用户态 在内核态&#xff1a;cs:eip可以是任意的地址&#xff0c;4G的内存地址空间 在用户态&#xff1a;cs:eip只能访问0x00000000—0xbfffffff的地址空间 2 系统调用的三层皮&#xff1a;xyz、system_call和sys…

网页制作小技巧:dl dt dd标签用法

< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd> 一般我们在做列表的时候通常只会用到ul和li,至于DL一般都很少用到&#xff0c;它也属于列表类的标签&#xff0c;下面说一下大概的用法&#xff1a; <dl>标记定义了一个定义列…

latex公式对齐_Word 写公式最方便的方法

自从用上了word 2016之后&#xff0c;发现他的公式编辑器真香!真香!!他有了latex的优雅&#xff0c;又有了Mathtype的可视化效果&#xff0c;甚至更好哈&#xff0c;当编辑大量公式时也不会因为插件问题卡掉当前的努力。学起来也不复杂&#xff0c;反正是word. 强烈推荐。我们最…

路要怎么走?关于程序员成长的一点思考

程序员的我们&#xff0c;是否想过今后的路该怎么走、如何发展、技术怎样提高?其实这也是我一直在思考的问题。下面就此问题&#xff0c;分享下我的看法。因为我阅历有限&#xff0c;有什么说的不对的&#xff0c;大家见谅&#xff0c;千万不要喷…… 一、程序员应该打好基础 …

TensorFlow 常见API

数据类型转换相关API Tensor Shape获取以及设置相关API Tensor合并、分割相关API Error相关类API 常量类型的Tensor对象相关API 序列和随机Tensor对象相关API Session相关API 逻辑运算符相关API 比较运算符相关API 调试相关API 图像处理-编码解码相关API 图像处理-调整大小相关…

python封装继承多态_浅谈JavaScript的面向对象和它的封装、继承、多态

写在前面既然是浅谈&#xff0c;就不会从原理上深度分析&#xff0c;只是帮助我们更好地理解...面向对象与面向过程面向对象和面向过程是两种不同的编程思想&#xff0c;刚开始接触编程的时候&#xff0c;我们大都是从面向过程起步的&#xff0c;毕竟像我一样&#xff0c;大家接…

将万亿以下的阿拉伯数字转为中文金额

package test.practice.month3; public class Test005 { //可以不用swich case将123456789转为一二三四五六七八九 //直接用char[] chars {一,二,三,四,五,六,七,八,九}; public static void main(String[] args) { System.out.println(getCMoney(102030405067L)); } private …

8.2 命令历史

2019独角兽企业重金招聘Python工程师标准>>> 命令历史 history //查看之前的命令.bash_history //存放之前敲过的命令&#xff0c;在 /root/ 目录下最大1000条 //默认参数值是1000条变量HISTSIZE/etc/profile中修改 //在其中可编辑HISTSIZE参数HISTTIMEFORMAT"…