POJ1155 TELE(树形DP)

题目是说给一棵树,叶子结点有负权,边有正权,问最多能选多少个叶子结点,使从叶子到根的权值和小于等于0。

考虑数据规模表示出状态:dp[u][k]表示在u结点为根的子树中选择k个叶子结点的最小权值

最后就从d[1][k]中找满足的最大的k。不过单这样转移时间复杂度是指数级,显然这题就是用树上背包了。

不过其实这题时间复杂度不会算= =反正感觉挺靠谱,交了就AC了。。

又做了一道树上背包,HDU1561和POJ3345。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 #define INF (1<<29)
 6 #define MAXN 3001
 7 struct Edge{
 8     int u,v,w,next;
 9 }edge[MAXN];
10 int NE,head[MAXN];
11 void addEdge(int u,int v,int w){
12     edge[NE].u=u; edge[NE].v=v; edge[NE].w=w;
13     edge[NE].next=head[u]; head[u]=NE++;
14 }
15 
16 int d[MAXN][MAXN],size[MAXN];
17 void dfs(int u){
18     bool isleaf=1;
19     for(int i=head[u]; i!=-1; i=edge[i].next){
20         int v=edge[i].v;
21         dfs(v);
22         size[u]+=size[v];
23         isleaf=0;
24     }
25     if(isleaf) size[u]=1;
26 }
27 int val[MAXN];
28 void dp(int u){
29     bool isleaf=1;
30     for(int i=head[u]; i!=-1; i=edge[i].next){
31         int v=edge[i].v;
32         dp(v);
33         isleaf=0;
34         for(int j=size[u]; j>=1; --j){
35             for(int k=1; k<=min(j,size[v]); ++k) d[u][j]=min(d[u][j],d[u][j-k]+d[v][k]+edge[i].w);
36         }
37     }
38     if(isleaf) d[u][1]=-val[u];
39 }
40 int main(){
41     memset(head,-1,sizeof(head));
42     int n,m,k,a,b;
43     scanf("%d%d",&n,&m);
44     for(int i=1; i<=n; ++i){
45         for(int j=1; j<=m; ++j) d[i][j]=INF;
46     }
47     for(int i=1; i<=n-m; ++i){
48         scanf("%d",&k);
49         while(k--){
50             scanf("%d%d",&a,&b);
51             addEdge(i,a,b);
52         }
53     }
54     for(int i=n-m+1; i<=n; ++i){
55         scanf("%d",val+i);
56     }
57     dfs(1);
58     dp(1);
59     for(int i=m; i>=0; --i){
60         if(d[1][i]<=0){
61             printf("%d",i);
62             break;
63         }
64     }
65     return 0;
66 } 

 

转载于:https://www.cnblogs.com/WABoss/p/5270220.html

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

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

相关文章

数据结构实验五 查找算法的实现

广州大学学生实验报告 开课实验室&#xff1a;计算机科学与工程实验&#xff08;电子楼416B&#xff09; 2019年6月11日 学院 计算机科学与教育软件学院 年级、专业、班 姓名 学号 实验课程名称 数据结构实验 成绩 实验项目名称 实验五 查找算法 指导…

margin和padding的区别

https://www.cnblogs.com/zxnn/p/8186225.html

前端学习(1811):前端调试之css装饰cursor练习

index.html <!DOCTYPE html> <html lang"en"><head><!--系统内置 start--><script type"text/javascript"></script><!--系统内置 end--><meta charset"UTF-8"><title>练习</title&g…

真机调试及上线简略流程

真机调试&#xff1a; 参考完整图文教程 --》生成证书公钥文件 --》系统应用程序-使用工具-钥匙串访问--》证书助理--》从证书颁发机构请求证书--》默认选项--》存到磁盘--》继续--》生成CertificateSigningRequest.certSigningRequest公钥文件--》生成开发证书 --》开发者管理…

数据结构实验六 综合数据处理

广州大学学生实验报告 开课实验室&#xff1a;计算机科学与工程实验&#xff08;电子楼416A&#xff09; 2019年6月14日 学院 计算机科学与教育软件学院 年级、专业、班 计算机大类 144班 姓名 学号 实验课程名称 数据结构实验 成绩 实验项目名称 实验六…

JAVA高并发秒杀系统构建之——高并发优化分析

https://blog.csdn.net/yd201430320529/article/details/70544203

CSS中的text-shadow。

text-shadow&#xff08;文字投影&#xff09;&#xff0c;box-shadow&#xff08;容器投影&#xff09;&#xff0c;border-radius&#xff08;圆角&#xff09;这三个属性估计以后用的比较多&#xff0c;记录 一下。目前不支持IE系列&#xff08;不过可以使用其他方法实现&am…

计组课程设计

计算机组成与系统结构课程设计实验报告 学院&#xff1a; 计算机学科与网络工程学院 专业班级&#xff1a; 计算机科学与技术172 姓名&#xff1a; 学号&#xff1a; 2019.06.…

阿里云人脸识别sdk

https://help.aliyun.com/document_detail/64074.html?spma2c4g.11186623.6.566.107a1619AfifHp

前端学习(1803):前端调试之事件伪类练习二

index.html <!DOCTYPE html> <html lang"en"><head><!--系统内置 start--><script type"text/javascript"></script><!--系统内置 end--><meta charset"UTF-8"><title>练习</title&g…

Spring 国际化

http://www.xdemo.org/spring-i18n/ xxxx_zh_CN.properties中不允许保存中文&#xff0c;用jdk/bin目录下的native2ascii.exe将中文转化为Unicoding即可 此处是native2ascii在线转化工具http://www.javawind.net/tools/native2ascii.jsp?actiontransform转载于:https://www.cn…

JS:两个json数组合并、去重,以及删除某一项元素

https://blog.csdn.net/qq_33242126/article/details/83107866

数据结构课程设计 神秘国度的爱情故事

数据结构 课程设计报告 广州大学 计算机科学与网络工程学院 计算机系 17级计科专业2班 2019年6月30日 广州大学学生实验报告 开课学院及实验室&#xff1a;计算机科学与工程实验室 2019年07月01日 学院 计算机科学与网络工程学院 年级/专业/班 计科1…

前端学习(1805):前端调试之列表伪类练习

index.html <!DOCTYPE html> <html lang"en"><head><!--系统内置 start--><script type"text/javascript"></script><!--系统内置 end--><meta charset"UTF-8"><title>练习</title&g…

Android中的一些基础知识(二)

这几天在回顾Android的基础知识&#xff0c;就把一些常见的知识点整理一下&#xff0c;以后忘了也可以翻出来看一看。 简单介绍一下Activity的生命周期 在API文档中对生命周期回调的函数描述的很详细&#xff0c;这里我只是翻译了一下。 onCreate&#xff1a;当Activity第一次…

关于Open browser failed!! Please check if you have installed the browser chrome correctly!错误的一种解决方法

新建一个文件夹&#xff0c;再在新建的文件夹里写html文件&#xff0c;再用快捷键&#xff1a;altb打开即可。

合并两个数组并去重(ES5和ES6两种方式实现)

https://blog.csdn.net/weixin_40890907/article/details/82764900