[JZOJ 5788] 餐馆
思路:
考虑树形dp。
我们设\(dp[i][j][0/1]\)表示在\(i\)为根的子树中花费\(j\)单位时间,最终回到/不必回到\(i\)的最大收益。
转移三种:
\(dp[x][j][0] = max(dp[x][j][0],dp[x][j - k - 2][0] + dp[y][k][1]);\)
\(dp[x][j][0] = max(dp[x][j][0],dp[x][j - k - 1][1] + dp[y][k][0]);\)
\(dp[x][j][1] = max(dp[x][j][1],dp[x][j - k - 2][1] + dp[y][k][1]);\)
搞定.
#include <bits/stdc++.h>
using namespace std;
inline int read() {
int q=0,f=1;char ch = getchar();
while(!isdigit(ch)){
if(ch=='-')f = -1;ch=getchar();
}
while(isdigit(ch)){
q=q*10+ch-'0';ch=getchar();
}
return q*f;
}
const int maxn = 600;
struct edge {
int to;
int nxt;
}e[maxn << 1];
int cnt;
int head[maxn<<1];
inline void add_edge(int u,int v) {
e[++cnt].to = v;
e[cnt].nxt = head[u];
head[u] = cnt;
}
inline void Add_edge(int u,int v) {
add_edge(u,v);
add_edge(v,u);
return;
}
int dp[maxn][maxn][2];
int m;int n;
int a[maxn];
inline void dfs(int x,int fa) {
for(int i = head[x];i;i=e[i].nxt) {
int y = e[i].to;
if(y == fa) continue;
dfs(y,x);
for(int j = m;j >= 2; --j) {
for(int k = 0;k <= m; ++k) {
if(j - k - 2 < 0) break;
dp[x][j][0] = max(dp[x][j][0],dp[x][j - k - 2][0] + dp[y][k][1]);
}
}
for(int j = m;j >= 1; --j) {
for(int k = 0;k <= m; ++k) {
if(j - k - 1 < 0) break;
dp[x][j][0] = max(dp[x][j][0],dp[x][j - k - 1][1] + dp[y][k][0]);
}
}
for(int j = m;j >= 2; --j) {
for(int k = 0;k <= m; ++k) {
if(j - k - 2 < 0) break;
dp[x][j][1] = max(dp[x][j][1],dp[x][j - k - 2][1] + dp[y][k][1]);
}
}
}
for(int i = m;i >= 1; --i) {
dp[x][i][0] = max(dp[x][i][0],dp[x][i - 1][0] + a[x]);
dp[x][i][1] = max(dp[x][i][1],dp[x][i - 1][1] + a[x]);
}
}
int main () {
#ifdef ONLINE_JUDGE
freopen("dostavljac.in","r",stdin);
freopen("dostavljac.out","w",stdout);
#endif
n = read(),m = read();
for(int i = 1;i <= n; ++i) {
a[i] = read();
}
for(int i = 1;i < n; ++i) {
int x = read(),y = read();
Add_edge(x,y);
}
dfs(1,0);
printf("%d\n",dp[1][m][0]);
return 0;
}
[JZOJ 5788] 餐馆的更多相关文章
- noi 6045 开餐馆
题目链接:http://noi.openjudge.cn/ch0206/6045/ 解题报告:参考了konjac 蒟蒻的. 题意: 有N个地址,从中选一些开餐馆,要保证相邻餐馆的距离大于k.问最大利润 ...
- 河南多校大一训练赛 E 开餐馆
题目链接:http://acm.hust.edu.cn/vjudge/contest/125004#problem/E 密码:acm Description 北大信息学院的同学小明毕业之后打算创业开餐 ...
- Problem B: 开个餐馆算算账
Description 小明创业了!他开了一家餐馆,每天客人还挺多的.每天下班后,他都要算算今天总共收入多少钱,但是手工算太麻烦了,所以他来向你求助了. Input 第1行N>0,表示餐馆提供N ...
- (jzoj snow的追寻)线段树维护树的直径
jzoj snow的追寻 DFS序上搞 合并暴力和,记录最长链和当前最远点,距离跑LCA # include <stdio.h> # include <stdlib.h> # ...
- [jzoj]3506.【NOIP2013模拟11.4A组】善良的精灵(fairy)(深度优先生成树)
Link https://jzoj.net/senior/#main/show/3506 Description 从前有一个善良的精灵. 一天,一个年轻人B找到她并请他预言他的未来.这个精灵透过他的水 ...
- [jzoj]3468.【NOIP2013模拟联考7】OSU!(osu)
Link https://jzoj.net/senior/#main/show/3468 Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: ...
- [jzoj]5478.【NOIP2017提高组正式赛】列队
Link https://jzoj.net/senior/#main/show/5478 Description Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校 ...
- [jzoj]1115.【HNOI2008】GT考试
Link https://jzoj.net/senior/#main/show/1115 Description 申准备报名参加GT考试,准考证号为n位数X1X2X3...Xn-1Xn(0<=X ...
- [jzoj]2538.【NOIP2009TG】Hankson 的趣味题
Link https://jzoj.net/senior/#main/show/2538 Description Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫H ...
随机推荐
- session之memcache
nginx服务器配置:192.168.200.111[root@nginx ~]# hostname nginx[root@nginx ~]# bash[root@nginx ~]# vim /usr ...
- 微信小程序 初阶
公司最近安排要学习一下微信小程序的开发,大体看了看,幸亏还有点javascript的底子,学起来不至于太难,其它的语法什么的真需要好好适应适应....头大 从头开始看微信小程序开发的文档,目前来说没有 ...
- redis设置自动启动
按照如下操作即可(可以自定义目录) mkdir /redis cd /redis wget http://download.redis.io/releases/redis-4.0.1.tar.gz t ...
- 机器学习改善Interpretability的几个技术
改善机器学习可解释性的技术和方法 尽管透明性和道德问题对于现场的数据科学家来说可能是抽象的,但实际上,可以做一些实际的事情来提高算法的可解释性 算法概括 首先是提高概括性.这听起来很简单,但并非那么简 ...
- vue app外卖(5) 使用swiper 进行图片轮播
1.查看swiper 文档 https://www.swiper.com.cn/usage/index.html 2. 下载 npm install --save swiper 3.在页面引入 imp ...
- delphi xe10 消息操作
//消息提醒(从手机屏幕顶部向下滑动,出现的提示消息) NotificationC: TNotificationCenter; procedure TNotificationsForm.btnSend ...
- NX二次开发-UFUN替换组件UF_ASSEM_use_alternate
NX9+VS2012 #include <uf.h> #include <uf_ui.h> #include <uf_assem.h> #include <u ...
- NX二次开发-对话框解锁UF_UI_unlock_ug_access
VC/MFC调用UG Dialog要进入加锁状态 加锁 UF_UI_lock_ug_access ( UF_UI_FROM_CUSTOM ); 此处为UF_UI_select的函数 解锁 UF_UI_ ...
- NX二次开发-C++time函数计时
NX11+VS2013 #include <uf.h> #include <uf_modl.h> #include <uf_ui.h> #include <t ...
- HDU3605: Escape-二进制优化建图-最大流
目录 目录 思路: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 目录 题意:传送门 原题目描述在最下面. \(n(n\leq 100000)\)个人\(m(m\leq 10) ...