hdu4044

题意:给你一颗树有n个节点,树的根节点为1,表示为敌人的基地,其他叶子节点为你的基地,你一开始有m元,给你每个节点可以建造的塔的数量和塔的价格和可以照成的伤害,每个节点至多建立一座塔。敌人的基地每次会派出一个敌人,他会去攻击你的基地,但是你不能确定他会去攻击哪一个基地,所以,请你计算出在花费不超过m的情况下,可以百分百消灭敌人的最大生命值(使得所有基地都免受攻击)。

思路:树上多组背包问题,dp方程有点难想,要取所有基地消灭生命值最小的最大值,还要注意塔花费为0的情况,具体见代码。

代码

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=1100;
const int INF=0x3fffffff;
int n,m,cnt;
struct{int v,next;
}edge[maxn*2];
int head[maxn];
struct{int pr,po;
}nd[maxn][55];//记录节点造塔的信息 
int jc[maxn][220];//jc[i][j]表示在节点j上建塔花费j最大可以造成的伤害 
int sz[maxn];//节点可以建塔的数量 
int dp[maxn][220];//dp[i][j] 表示节点i花费j可以使得当前子树的所有基地免受攻击而消灭敌人的最大生命值 
void add(int u,int v){edge[cnt].v=v;edge[cnt].next=head[u];head[u]=cnt++;
}
void dfs(int k,int fz){for(int i=0;i<=m;i++){dp[k][i]=INF;//因为找的是在保证所有基地不被攻击下可以消灭的最大值生命值,所以先初始化为无穷大 jc[k][i]=0;//初始化 
    }for(int i=0;i<sz[k];i++){for(int j=nd[k][i].pr;j<=m;j++){jc[k][j]=max(jc[k][j],nd[k][i].po);//更新当前节点上建塔的信息 
        }    }bool lg=true;//看是不是叶子节点 for(int i=head[k];i!=-1;i=edge[i].next){int v=edge[i].v;if(v!=fz){dfs(v,k);lg=false;for(int j=m;j>=0;j--){int mx=0; for(int j1=0;j1<=j;j1++){mx=max(mx,min(dp[k][j-j1],dp[v][j1]));//因为你不能确定选j1为多少时最大,所以不能直接用来更新dp[k][j] 
                }dp[k][j]=min(dp[k][j],mx);//    printf("ww%d %d %d %d\n",k,v,j,dp[k][j]);
            }//    printf("\n");
        }}if(lg){for(int i=0;i<=m;i++)dp[k][i]=jc[k][i];//在叶子节点时直接考虑在自己上面建塔 
    }else{for(int i=m;i>=0;i--){int mx=dp[k][i]; for(int j=0;j<=i;j++){//因为存在建塔的消耗为0的情况,当j==i时你在之前可能已经更新过dp[k][i]了,而再最后你又会 mx=max(mx,dp[k][j]+jc[k][i-j]);//用dp[k][i]和jc[k][0]来更新dp[k][i],而你一个点只能建一座塔 ,所以用mx做过渡 //printf("%d %d %d %d %d %d %d\n",k,i,dp[k][i],j,dp[k][j],i-j,jc[k][i-j]);
            }    dp[k][i]=mx;}//    printf("\n");
    }
}
int main(){int t;int u,v;scanf("%d",&t);while(t--){scanf("%d",&n);cnt=0;fill(head,head+2+n,-1);for(int i=1;i<n;i++){scanf("%d%d",&u,&v);add(u,v);add(v,u);}scanf("%d",&m);for(int i=1;i<=n;i++){scanf("%d",&sz[i]);for(int j=0;j<sz[i];j++){scanf("%d%d",&nd[i][j].pr,&nd[i][j].po);}}dfs(1,0);printf("%d\n",dp[1][m]);}return 0;
} 

 

转载于:https://www.cnblogs.com/cglongge/p/10526847.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248361.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RS100项目进展更新

1. 添加手机界面访问网页&#xff0c;毕竟PDA的屏幕大小和PC机大小不一致&#xff0c;完成了一自适应网页&#xff0c;便于在手机上观看实时画面&#xff1b; 2. 此项目为一个远程视频监控远程开关项目&#xff0c;远程PC机或者手机能操作到监控端的开关&#xff0c;所以在远程…

python os操作

1 # 常用的文件管理操作2 # https://www.cnblogs.com/dkblog/archive/2011/03/25/1995537.html3 import os4 import shutil5 6 # 切换工作目录,默认是在当前目录下7 # os.chdir("xx")8 9 # 当前的工作目录 D:\pythonworkspace\py_base\cn\tele\io 10 print(os.getcw…

洛谷模板,树状数组二 差分

题目链接&#xff1a;https://www.luogu.org/problemnew/show/P3368 先介绍下差分&#xff1a; 设数组a[]{1,6,8,5,10}&#xff0c;那么差分数组b[]{1,5,2,-3,5} 也就是说b[i]a[i]-a[i-1];(a[0]0;)&#xff0c;那么a[i]b[1]....b[i];(这个很好证的)。 假如区间[2,4]都加上2的话…

KMS安装后激活机器

slmgr /skms 192.168.26.82 slmgr /ato转载于:https://www.cnblogs.com/EllieSoft/p/3410320.html

Java内存模型深度解析:总结

处理器内存模型 顺序一致性内存模型是一个理论参考模型&#xff0c;JMM和处理器内存模型在设计时通常会把顺序一致性内存模型作为参照。JMM和处理器内存模型在设计时会对顺序一致性模型做一些放松&#xff0c;因为如果完全按照顺序一致性模型来实现处理器和JMM&#xff0c;那么…

sourcetree,创建工作流报错:Fatal: Not a gitflow-enabled repo yet. Please run 'git flow init' first.-》解决办法...

1、打开项目下.git/config文件&#xff0c;或者如下图操作&#xff1a; 2、打开config文件以后&#xff0c;删除所有 [gitflow *条目并保存文件 3、关闭并重新打开sourcetree 4、仓库-》Git 工作流-》初始化仓库即可转载于:https://www.cnblogs.com/yxfeng/p/10536955.html

关于a标签的href属性的注意事项

今天在做一个lightbox效果的时候出现了一个问题。 当往下滚动再点击按钮出现lightbox的时候&#xff0c;lightbox的遮罩层不能铺满&#xff08;即滚动高度处不能铺上&#xff09;&#xff0c;如下图所示。原因是提交按钮使用的是a标签&#xff0c;当给a标签写上href属性的时候&…

爬虫开发4.三种数据解析方式

数据解析三种方式引言&#xff1a;回顾requests实现数据爬取的流程 指定url基于requests模块发起请求获取响应对象中的数据进行持久化存储其实&#xff0c;在上述流程中还需要较为重要的一步&#xff0c;就是在持久化存储之前需要进行指定数据解析。因为大多数情况下的需求&…

在mac上安装gitlab

参考链接&#xff1a; https://www.cnblogs.com/floodwater/p/10138265.html 注意事项&#xff1a; 在安装gitlab-ce时&#xff0c;配置hostname域名后&#xff0c;通过域名访问gitlab时&#xff0c;需要配置本机hosts文件&#xff0c;不然不能访问 本地hosts文件中配置后 就可…

org.apache.maven.archiver.MavenArchiver.getManifest错误

org.apache.maven.archiver.MavenArchiver.getManifest错误 网上普遍要add&#xff0c;&#xff0c;&#xff0c;&#xff0c;&#xff0c; 正解&#xff1a; 接到一个新需求&#xff0c;开始搭建项目时遇到了如标题错误。查询网络普遍得到是更新maven插件版本。 之前已安装过此…

d3.js 入门指南

说到数据可视化&#xff0c;我们会行到很多优秀的框架&#xff0c;像echarts、highcharts&#xff0c;这些框架很优雅&#xff0c;健壮&#xff0c;能满足我们对可视化的大部分需求&#xff0c;但是缺点也很明显&#xff0c;就是这些框架几乎是不可定制化的&#xff0c;当遇到特…

【LeetCode】200. 岛屿的个数

题目 给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;计算岛屿的数量。一个岛被水包围&#xff0c;并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。 示例 1:输入: 11110 110…

AI 模拟退火算法

模拟退火算法转载于:https://www.cnblogs.com/yangwenhuan/p/10548171.html

keep用法

keep 是英语中用法灵活的动词之一&#xff0c;下面笔者就其用法归纳如下&#xff1a; 一、用作系动词&#xff0c;意为“保持&#xff08;某种状态&#xff09;”&#xff0c;其后常接形容词作表语。如&#xff1a; Please keep quiet / silent! 请保持安静&#xff01; Aft…

Kubernetes系列之Helm介绍篇

本次系列使用的所需部署包版本都使用的目前最新的或最新稳定版&#xff0c;安装包地址请到公众号内回复【K8s实战】获取 介绍 Helm 是 Deis 开发的一个用于 Kubernetes 应用的包管理工具&#xff0c;主要用来管理 Charts。有点类似于 Ubuntu 中的 APT 或 CentOS 中的 YUM。Helm…

HTNL笔记整合

简述概括了HTML 的部分内容&#xff0c;不是很完善&#xff0c;希望能给予你们相对的帮助。 一下文件的整合百度云链接&#xff1a;HTML整合笔记 第一章 HTML入门 课时1&#xff1a;HTML初识 1、英文名&#xff08;Hyper Text Markup Language&#xff09;超文本标签语言 对…

EXCEL 图表 只在拐点的时候显示数字

EXCEL图表只在折线的拐点显示数值&#xff0c;中间不需要显示。同时往下拐的&#xff0c;显示在上方&#xff0c;往上的显示在下方&#xff0c;这样数值不会挡住线。 首先&#xff0c;做一些模拟数据 因为起点和终点数值必须显示&#xff0c;所以单元格&#xff0c;C2 D2 C19 D…

浅谈Vue之双向绑定

VUE实现双向数据绑定的原理就是利用了 Object.defineProperty() 这个方法重新定义了对象获取属性值(get)和设置属性值(set)的操作来实现的。那么Object.defineProperty究竟是该如何使用的呢&#xff1f;先看个例子 <!DOCTYPE html> <html lang"en"><h…

【AtCoder】AGC017

A - Biscuits dp[i][0/1]表示当前和是偶数还是奇数&#xff0c;直接转移即可 #include <bits/stdc.h> #define fi first #define se second #define pii pair<int,int> #define mp make_pair #define pb push_back #define space putchar( ) #define enter putchar…

SQL语法(1、安装操作)

1、数据库的系统概述及安装与基本使用 bilibili可查找安装视频百度了解一下 – 使用超级管理员登录 CONN sys/change_on_install AS SYSDBA ; – 创建c##scott用户 CREATE USER c##scott IDENTIFIED BY tiger ; – 为用户授权 GRANT CONNECT,RESOURCE,UNLIMITED TABLESPACE…