树形dp

涉及不重复背包组合求最小

从边长分段看不好入手

因为点数只有100点值<=2,总值<=200

可以对每个点的每个值进行dp

这里最后不回来肯定优于全回来

然后由于要分为回来和不回来两种情况要分别dp,因为不回来会要用到回来的

不回来的可以按不回来的最小+去掉不回来那个子节点的回来的最小进行dp

另外注意下上下限和初始值

#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
const int N = 205;
int vec[N];
struct Edge{
int v, len, nxt;
}edge[N];
int cnt;
int head[N];
int dp[2][N][N];
void addedge(int u, int v, int value) {
edge[cnt] = Edge{ v,value,head[u] };
head[u] = cnt++;
edge[cnt] = Edge{ u,value,head[v] };
head[v] = cnt++;
}
void dfs(int u,int p) {
dp[0][u][vec[u]] = 0;
dp[1][u][vec[u]] = 0;
for (int t = head[u]; t != -1; t = edge[t].nxt) {
Edge e = edge[t];
if (e.v == p)
continue;
dfs(e.v, u); int v = e.v;
for (int i = 200; i >= 0; i--)
{
for (int j = 0; j <= i; j++) {
dp[0][u][i] = min(dp[0][u][i],dp[0][u][j] + dp[0][v][i-j]+2*e.len);
}
}
}
for (int t = head[u]; t != -1; t = edge[t].nxt) {
Edge e = edge[t];
int v = e.v;
if (v == p)
continue;
int sum[N];
for (int i = 0; i <= 202; i++)
sum[i] = 1e9;
sum[vec[u]] = 0;
for (int t2 = head[u]; t2 != -1;t2=edge[t2].nxt) {
Edge e2 = edge[t2];
int v2 = e2.v;
if (v2==p || v2 == v)
continue; for (int i = 200; i >= 0; i--){
for (int j = 0; j <= i; j++) {
sum[i] = min(sum[i], sum[j] + dp[0][v2][i - j]+2*e2.len);
}
}
}
for (int i = 200; i >= 0; i--) {
for (int j = 0; j <= i; j++) {
dp[1][u][i] = min(dp[1][u][i], dp[1][v][j] + sum[i - j]+e.len);
}
}
}
}
int main() {
int n;
cin >> n;
cnt = 1;
for (int i = 1; i <= n; i++) {
cin >> vec[i];
}
memset(head, -1, sizeof head);
for (int i = 0; i < 2; i++)
for (int j = 0; j <= 200; j++)
for (int k = 0; k <= 200; k++)
dp[i][j][k] = 1e9; for (int i = 0; i < n - 1; i++) {
int sv, ev, w;
cin >> sv >> ev >> w;
addedge(sv,ev,w);
}
dfs(1, 0);
int m;
cin >> m;
while(m--){
int x;
cin >> x;
for (int i = 200; i >=0; i--)
if (dp[1][1][i] <= x)
{
printf("%d\n", i);
break;
}
}
return 0;
}

Hihocoder 1063 缩地的更多相关文章

  1. HihoCoder 1063 : 缩地 树形DP第二题(对象 边)

    时间限制:12000ms 单点时限:1000ms 内存限制:256MB 描述 编织者是 Dota 系列中的一个伪核,拥有很强的生存能力和线上消耗能力.编织者的代表性技能是缩地.缩地带来的隐身.极限移动 ...

  2. 树形DP专题

    DP是我的弱项, 此专题意在总结树形DP的解题思路. 最小代价遍历一棵树 给定一棵带边权的树 $T=(V,E)$ , 遍历它 (树的每个节点都访问至少一次) 所需的最小代价. 这里的代价由具体问题所定 ...

  3. hihocoder -1121-二分图的判定

    hihocoder -1121-二分图的判定 1121 : 二分图一•二分图判定 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 大家好,我是小Hi和小Ho的小伙伴Net ...

  4. Hihocoder 太阁最新面经算法竞赛18

    Hihocoder 太阁最新面经算法竞赛18 source: https://hihocoder.com/contest/hihointerview27/problems 题目1 : Big Plus ...

  5. hihoCoder太阁最新面经算法竞赛15

    hihoCoder太阁最新面经算法竞赛15 Link: http://hihocoder.com/contest/hihointerview24 题目1 : Boarding Passes 时间限制: ...

  6. 【hihoCoder 1454】【hiho挑战赛25】【坑】Rikka with Tree II

    http://hihocoder.com/problemset/problem/1454 调了好长时间,谜之WA... 等我以后学好dp再来看为什么吧,先弃坑(╯‵□′)╯︵┻━┻ #include& ...

  7. 【hihocoder#1413】Rikka with String 后缀自动机 + 差分

    搞了一上午+接近一下午这个题,然后被屠了个稀烂,默默仰慕一晚上学会SAM的以及半天4道SAM的hxy大爷. 题目链接:http://hihocoder.com/problemset/problem/1 ...

  8. 【hihoCoder】1148:2月29日

    问题:http://hihocoder.com/problemset/problem/1148 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 思路: 1. 将问题转换成求两个日 ...

  9. 【hihoCoder】1288 : Font Size

    题目:http://hihocoder.com/problemset/problem/1288 手机屏幕大小为 W(宽) * H(长),一篇文章有N段,每段有ai个字,要求使得该文章占用的页数不超过P ...

随机推荐

  1. SOAPUI使用教程-MockOperations和响应

    如前所述,一个MockService有多个MockOperations其中每个可以包含任意数量的MockResponse消息; 也就是说,一个MockService响应实际上包括若干预设响应之间发生变 ...

  2. 如何预览将要上传的图片-使用H5的FileAPI

    这篇将要说的东西已经不新鲜了. 参考资料: Reading files in JavaScript using the File APIs (鉴于作者在美国, 我姑且认为作者母语是英语, 当然链接中有 ...

  3. Why do we live in this world?

    Why do we live in this world? It seems to me there is nothing but two reasons, - to live the livabil ...

  4. TCP/IP连接状态

    1.建立连接协议(三次握手)(1)客户端发送一个带SYN标志的TCP报文到服务器.这是三次握手过程中的报文1.(2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN ...

  5. 基于dubbo框架下的RPC通讯协议性能测试

    一.前言 Dubbo RPC服务框架支持丰富的传输协议.序列化方式等通讯相关的配置和扩展.dubbo执行一次RPC请求的过程大致如下:消费者(Consumer)向注册中心(Registry)执行RPC ...

  6. ZeroMQ接口函数之 :zmq_bind - 绑定一个socket

    ZeroMQ 官方地址 : http://api.zeromq.org/4-0:zmq-bind zmq_bind(3) ZMQ Manual - ZMQ/3.2.5 Name zmq_bind -  ...

  7. ZeroMQ接口函数之 :zmq_msg_set - 设置消息的性质

    ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq_msg_set zmq_msg_set(3)  ØMQ Manual - ØMQ/3.2.5 Name zmq_m ...

  8. http状态码详解

    1 网址协议不支持的协议. 2 检测器内部错误. 3 网址格式不正确. 5 无法连接到代理服务器. 6 无法连接到服务器或找不到域名. 7 连接服务器失败. 28 操作超时.可能原因:页面执行时间过长 ...

  9. bzoj4511:[Usaco2016 Jan]Subsequences Summing to Sevens

    题目大意:给个序列,求最长的连续子序列使其为7的倍数 又是一道令人欢喜的不用怎么用脑的水题.. 边读入,边计算前缀和 分别保存前缀和%7结果为1,2,3,4,5,6的第一次的位置 然后减一减就知道长度 ...

  10. JavaScript 数组操作

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...