树形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. 《DSP using MATLAB》示例Example5.16

    代码: x1 = [1,2,2,1]; x2 = [1,-1,-1,1]; x3 = conv(x1,x2); % N = 5 n1 = 0:1:length(x1)-1; n2 = 0:1:leng ...

  2. 1.1 Quartz 2D 绘图

    本文并非最终版本,如有更新或更正会第一时间置顶,联系方式详见文末 如果觉得本文内容过长,请前往本人 “简书”   Quartz2D 绘图主要步骤:   1. 获取[图形上下文]对象 —— (拿到草稿纸 ...

  3. 【原】iOS学习48地图

    一.地图的简介 在移动互联网时代,移动app能解决用户的很多生活琐事,比如 导航:去任意陌生的地方 周边:找餐馆.找酒店.找银行.找电影院 手机软件:微信摇一摇.QQ附近的人.微博.支付宝等 在上述应 ...

  4. Json.Net的简单使用

    1.添加程序集 Newtonsoft.Json.dll 2.创建模型 public class Person {   public string Name { get; set; }   public ...

  5. Jquery事件:鼠标移入移出(mouseenter,mouseleave)

    前几天帮朋友做了一个单页面,其中有个效果就是鼠标移动到头像上变换头像样式,当鼠标移出时恢复头像样式.当时没多想,脑子就蹦出了mouseover,mouseout两个方法. 但是在编写页面的过程中,无论 ...

  6. HDU 3308 LCIS(线段树)

    题目链接 模板题吧,忘了好多,终于A了... #include <cstring> #include <cstdio> #include <string> #inc ...

  7. docker 配置文件引发的问题

    好久没有配置 vmware / harbor 了,突然间来了兴趣,结果让我失望了,登陆反复的被refused; 这个是配置文件地址:https://github.com/vmware/harbor/b ...

  8. 2016huasacm暑假集训训练三 F - Jungle Roads

    题目链接:http://acm.hust.edu.cn/vjudge/contest/123674#problem/F 题意:在相通n个岛屿的所有桥都坏了,要重修,重修每一个桥所用的时间不同,求重修使 ...

  9. MVC中使用EF的技巧集

    1.从数据库生成模型后,再次更新模型时,之前设置的验证规则会丢失. 解决方法:在Models文件夹中新建一个空白类,把它命名为shujuyanzh.cs(类名可以自定),然后把Models中自动生成的 ...

  10. 掌握Thinkphp3.2.0----CURD

    TP-----CURD  create()创建数据----整理数据 在数据库添加等操作之前,我们首先需要对数据进行创建.何为数据创建,就是接受提交过来的数据,比如表单提交的 POST(默认)数据.接受 ...