洛谷 偷天换日&&“访问”美术馆
典型的树形DP
按理说是先做“访问美术馆”再做偷天换日。
但是我先做了偷天换日然后再做的“访问”美术馆
DP方程好推,偷天换日在遇到有展品的时候做背包,因为是先做的偷天换日,所以把偷天换日的输入w,c直接将输入改为赋值就A了。
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#define MAXN 311
using namespace std;
struct node{
int to, nxt, val;
}edge[MAXN << ];
int flag, tot, n, head[MAXN], nxt[MAXN << ], to[MAXN << ], w[MAXN], val[MAXN << ], dp[MAXN][MAXN << ];
void add(int u, int v, int w) {
edge[++tot].nxt = head[u], head[u] = tot, edge[tot].to = v, edge[tot].val = w;
edge[++tot].nxt = head[v], head[v] = tot, edge[tot].to = u, edge[tot].val = w;
}
void dfs(int now) {
int t, x, flag1;
scanf("%d%d", &t, &x);
add(now, ++flag, t << );
if(!x) flag1 = flag, dfs(flag1), dfs(flag1);
else for(int i = , c, w; i <= x; i++) {
scanf("%d%d", &w, &c);
// w = 1, c = 5;
for(int j = n; j >= c; j--) dp[flag][j] = max(dp[flag][j], dp[flag][j - c] + w);
}
}
void dfs1(int now, int fa) {
for(int i = head[now]; i; i = edge[i].nxt)
if(fa != edge[i].to) {
dfs1(edge[i].to, now);
for(int j = n; j >= ; j--)
for(int k = edge[i].val; k <= j; k++)
dp[now][j] = max(dp[now][j], dp[now][j - k] + dp[edge[i].to][k - edge[i].val]);
}
}
int main() {
scanf("%d", &n), n--;
dfs(++flag);
dfs1(, );
printf("%d", dp[][n]);
return ;
}
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#define MAXN 311
using namespace std;
struct node{
int to, nxt, val;
}edge[MAXN << ];
int flag, tot, n, head[MAXN], nxt[MAXN << ], to[MAXN << ], w[MAXN], val[MAXN << ], dp[MAXN][MAXN << ];
void add(int u, int v, int w) {
edge[++tot].nxt = head[u], head[u] = tot, edge[tot].to = v, edge[tot].val = w;
edge[++tot].nxt = head[v], head[v] = tot, edge[tot].to = u, edge[tot].val = w;
}
void dfs(int now) {
int t, x, flag1;
scanf("%d%d", &t, &x);
add(now, ++flag, t << );
if(!x) flag1 = flag, dfs(flag1), dfs(flag1);
else for(int i = , c, w; i <= x; i++) {
// scanf("%d%d", &w, &c);
w = , c = ;
for(int j = n; j >= c; j--) dp[flag][j] = max(dp[flag][j], dp[flag][j - c] + w);
}
}
void dfs1(int now, int fa) {
for(int i = head[now]; i; i = edge[i].nxt)
if(fa != edge[i].to) {
dfs1(edge[i].to, now);
for(int j = n; j >= ; j--)
for(int k = edge[i].val; k <= j; k++)
dp[now][j] = max(dp[now][j], dp[now][j - k] + dp[edge[i].to][k - edge[i].val]);
}
}
int main() {
scanf("%d", &n), n--;
dfs(++flag);
dfs1(, );
printf("%d", dp[][n]);
return ;
}
一世安宁
洛谷 偷天换日&&“访问”美术馆的更多相关文章
- 洛谷 P1270 “访问”美术馆 解题报告
P1270 "访问"美术馆 题目描述 经过数月的精心准备,Peer Brelstet,一个出了名的盗画者,准备开始他的下一个行动.艺术馆的结构,每条走廊要么分叉为两条走廊,要么通向 ...
- 洛谷 P1270 “访问”美术馆
P1270 “访问”美术馆 题目描述 经过数月的精心准备,Peer Brelstet,一个出了名的盗画者,准备开始他的下一个行动.艺术馆的结构,每条走廊要么分叉为两条走廊,要么通向一个展览室.Peer ...
- 洛谷 P1270 “访问”美术馆(树形DP)
P1270 “访问”美术馆 题目描述 经过数月的精心准备,Peer Brelstet,一个出了名的盗画者,准备开始他的下一个行动.艺术馆的结构,每条走廊要么分叉为两条走廊,要么通向一个展览室.Peer ...
- 洛谷P1270 访问美术馆
题目 树形DP,首先考虑递归建图,类似于线段树的中序遍历.然后取状态dp[i][j]表示i点花费j时间所偷到的最多的画,有方程: \(dp[now][nwt] = max(dp[now][nwt], ...
- luogu 访问”美术馆“ && 偷天换日
把这两个题放在一起,是因为这两个题差不多,难度递进其实是懒得写两个博客所以一起分享一下 访问“美术馆” 题目描述 经过数月的精心准备,Peer Brelstet,一个出了名的盗画者,准备开始他的下一个 ...
- 洛谷P1519 穿越栅栏 Overfencing
P1519 穿越栅栏 Overfencing 69通过 275提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 USACO是100分,洛谷是20分 为什么 ...
- 洛谷P1198 [JSOI2008]最大数
P1198 [JSOI2008]最大数 267通过 1.2K提交 题目提供者该用户不存在 标签线段树各省省选 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 WA80的戳这QwQ BZOJ都 ...
- 洛谷P2444 [POI2000]病毒(AC自动机,DFS求环)
洛谷题目传送门 AC自动机入门--yyb巨佬的博客 AC自动机入手经典好题(虽然年代久远) 有了fail指针,trie树就不是原来的树型结构了,我们可以把它叫做trie图,由父节点向子节点连的边和fa ...
- 洛谷P2617 Dynamic Ranking(主席树,树套树,树状数组)
洛谷题目传送门 YCB巨佬对此题有详细的讲解.%YCB%请点这里 思路分析 不能套用静态主席树的方法了.因为的\(N\)个线段树相互纠缠,一旦改了一个点,整个主席树统统都要改一遍...... 话说我真 ...
随机推荐
- python爬虫之『入门基础』
HTTP请求 1.首先需要了解一下http请求,当用户在地址栏中输入网址,发送网络请求的过程是什么? 可以参考我之前学习的时候转载的一篇文章一次完整的HTTP事务过程–超详细 2.还需要了解一下htt ...
- 今日SGU 5.4
SGU 127 题意:给你n个数字,和m,k,问你有多少个数字的m次幂可以被k整除 收获:快速幂 #include<bits/stdc++.h> #define de(x) cout< ...
- svn: Can't convert string from 'UTF-8' to native encoding 解决的方法
今天在down代码时遇到了例如以下问题: [xxx@xxx ~]$ svn co https://xxxxxxxxxxxxx svn: Can't convert string from 'UTF-8 ...
- 互联网+时代IT管理者的转型
最近,大众创业万众创新的热潮真是一浪接着一浪,它实际上是一次政府和企事业的自我改革,利用互联网+的思维与技术对生产模式.流通模式与运营模式进行全新的变革,商业的本质是没有变的,仅仅是穿了个马甲来表演. ...
- 【Android Studio探索之路系列】之六:Android Studio加入依赖
作者:郭孝星 微博:郭孝星的新浪微博 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.co ...
- Git管理软件
软件下载地址 首先下载库 https://code.google.com/p/msysgit/ 接着安装 https://code.google.com/p/tortoisegit/ 然后就能够用了
- Funui-overlay 如何添加theme 的 overlay
昨天更改theme主题的时候,发现所有仓库下的theme都是共用的.也就是说,如果你更改了52平台下的theme,那么你提交了代码以后,82下也会发生相应的更改.但是,昨天修改的theme属性,只在3 ...
- 5.使用SOAP的XML消息传递
转自:https://blog.csdn.net/u014066037/article/details/51724658 使用SOAP的XML消息传递的简易流程图: 详细步骤如下: (1)服务请求者的 ...
- Boost解析xml——xml写入
<?xml version="1.0" encoding="utf-8"?> <Config> <Item name=" ...
- 【2017"百度之星"程序设计大赛 - 初赛(A)】今夕何夕
[链接]http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=775&pid=1005 [题意] 在这里写题意 [题 ...