【CodeVS 1163】访问艺术馆
http://codevs.cn/submission/2367697/
loli蜜汁(面向高一)树形dp是这道题的改编。
改编后的题目中每个展览厅的有多个不同的画,偷画的时间和画的价值也不同,求最大价值。
需要在叶节点上做01背包。
但codevs上的这道题就简单多了,直接改了改01背包交上去A了。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct nodeTreeDP {
struct node {int nxt, to;} E[100003];
int cnt, val[103], point[50003], f[103][603], m, tot;
nodeTreeDP() {
cnt = 0; tot = 1;
memset(E, 0, sizeof(E));
memset(f, 0, sizeof(f));
memset(point, 0, sizeof(point));
}
void ins(int u, int v) {E[++cnt] = (node) {point[u], v}; point[u] = cnt;}
void dfsread(int from) {
int t, x;
scanf("%d%d", &t, &x);
++tot;
ins(from, tot);
val[tot] = t << 1;
if (x) {
int w, c; w = 1; c = 5;
for(int i = 1; i <= x; ++i) {
for(int j = 600; j >= 0; --j)
if (j - (t << 1) - c >= 0)
f[tot][j] = max(f[tot][j], f[tot][j - c] + w);
}
} else {
int now = tot;
dfsread(now);
dfsread(now);
}
}
void readin() {
int t, x;
scanf("%d%d", &t, &x);
val[1] = t << 1;
if (!x) {
dfsread(1);
dfsread(1);
} else {
int w, c; w = 1; c = 5;
for(int i = 1; i <= x; ++i) {
for(int j = 600; j >= 0; --j)
if (j - (t << 1) - c >= 0)
f[1][j] = max(f[1][j], f[1][j - c] + w);
}
}
}
void TreeDP(int x) {
for(int i = point[x]; i; i = E[i].nxt)
TreeDP(E[i].to);
if (!point[x]) return;
int left = 0, right = 0;
for(int i = point[x]; i; i = E[i].nxt) {
if (!left) left = E[i].to;
else right = E[i].to;
}
for(int top = val[x]; top <= 600; ++top) {
int res = top - val[x];
for(int leftnum = 0; leftnum <= res; ++leftnum) {
int rightnum = res - leftnum;
f[x][top] = max(f[x][top], f[left][leftnum] + f[right][rightnum]);
}
}
}
void ansit() {
TreeDP(1);
printf("%d\n", f[1][m]);
}
} *T;
int main() {
T = new nodeTreeDP;
scanf("%d", &T->m);
T->readin();
T->ansit();
return 0;
}
【CodeVS 1163】访问艺术馆的更多相关文章
- codevs 1163 访问艺术馆
1163 访问艺术馆 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description 皮尔是一个出了名的盗画者,他经过数月的精心准备,打算到艺术馆盗画.艺术馆的结 ...
- Codevs No.1163 访问艺术馆
2016-05-31 20:48:47 题目链接: 访问艺术馆 (Codevs No.1163) 题目大意: 一个贼要在一个二叉树结构的艺术馆中偷画,画都处于叶子节点处,偷画和经过走廊都需要时间,求在 ...
- codevs 访问艺术馆
/* codevs 1163 访问艺术馆 红果果的树形dp*/ #include<iostream> #include<cstdio> #include<cstring& ...
- codevs1163访问艺术馆(树形dp)
1163 访问艺术馆 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 皮尔是一个出了名的盗画者,他经过数月的精心准备, ...
- codevs 1163:访问艺术馆
题目描述 Description 皮尔是一个出了名的盗画者,他经过数月的精心准备,打算到艺术馆盗画.艺术馆的结构,每条走廊要么分叉为二条走廊,要么通向一个展览室.皮尔知道每个展室里藏画的数量,并且他精 ...
- 【codevs1163】访问艺术馆
题目描述 皮尔是一个出了名的盗画者,他经过数月的精心准备,打算到艺术馆盗画.艺术馆的结构,每条走廊要么分叉为二条走廊,要么通向一个展览室.皮尔知道每个展室里藏画的数量,并且他精确地测量了通过每条走廊的 ...
- 【codevs1163】访问艺术馆 树形dp
题目描述 皮尔是一个出了名的盗画者,他经过数月的精心准备,打算到艺术馆盗画.艺术馆的结构,每条走廊要么分叉为二条走廊,要么通向一个展览室.皮尔知道每个展室里藏画的数量,并且他精确地测量了通过每条走廊的 ...
- codevs1163访问艺术馆 树形dp
算裸的树形dp吧 回来复习一波 #include<cstdio> #include<cstring> #include<algorithm> #include< ...
- 2016. 4.10 NOI codevs 动态规划练习
1.codevs1040 统计单词个数 1040 统计单词个数 2001年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 De ...
随机推荐
- 洛谷P2331 [SCOI2005] 最大子矩阵[序列DP]
题目描述 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. 输入输出格式 输入格式: 第一行为n,m,k(1≤n≤100,1≤m≤2 ...
- NOIP2003加分二叉树[树 区间DP]
题目描述 设一个n个节点的二叉树tree的中序遍历为(1,2,3,…,n),其中数字1,2,3,…,n为节点编号.每个节点都有一个分数(均为正整数),记第i个节点的分数为di,tree及它的每个子树都 ...
- 第18章 图元文件_18.2 增强型图元文件(emf)(1)
18.2 增强型图元文件(emf) 18.2.1 创建并显示增强型图元文件的步骤 (1)创建:hdcEMF = CreateEnhMetaFile(hdcRef,szFilename,lpRect,l ...
- ComboBox的数据联动
实现效果: 点击年级下拉框值时,获取科目下拉框值 一:加载年级下拉框值 GradeDAL层: //检索所有年级名称集合,返回的是泛型集合List<Grade> public List< ...
- REST架构
网络上的所有事物都被抽象为资源(resource): 每个资源对应一个唯一的资源标识符(resource identifier): 通过通用的连接器接口(generic connector inter ...
- Java中正则Matcher类的matches()、lookAt()和find()的区别
在Matcher类中有matches.lookingAt和find都是匹配目标的方法,但容易混淆,整理它们的区别如下: matches:整个匹配,只有整个字符序列完全匹配成功,才返回True,否则返回 ...
- http中关于缓存的那些header信息
以前看过这方面的信息,这次用nginx做静态服务器又遇到了这个问题,所以在此总结下
- 匹配字符串的KMP算法
其中next序列,表示子串的前后缀最大匹配长度. 例如对于字符串C[], next[i]表示子串c[0 .. i]中, 前缀与后缀的最大匹配长度. 举例如果子串是 abcuab, 其前缀是a, ab, ...
- (原创)mybatis学习四,利用mybatis自动创建代码
在使用mybatis的过程中,我们可以直接利用MyBatis生成器自动生成实体类.DAO接口和Mapping映射文件,然后copy到工程中即可 需要的jar包如下 下载路径如下:下载jar包 其中的g ...
- php中创建和调用webservice接口示例
php中创建和调用webservice接口示例 这篇文章主要介绍了php中创建和调用webservice接口示例,包括webservice基本知识.webservice服务端例子.webservi ...