博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA 10859 Placing Lampposts 树形DP
阅读量:6443 次
发布时间:2019-06-23

本文共 603 字,大约阅读时间需要 2 分钟。

题意:

给一个n个点m条边的无向无环图,再尽量少的结点上放上灯,使得所有边都被照亮(每个灯会照亮所有与它相连的边)

在灯的总数最小的前提下,被两盏灯照亮的边尽量大。

优化条件有两个:灯的数量a最少,被两灯照亮的边数b最大,因为边的总数是一定的,不是被一个灯照亮就是被两个灯照亮

所以第二个条件可用"被一个灯照亮的边数 c最小"代替

设x=a*M+c;M是一个足够大的常数

那么优化条件就变成只有x尽量小了,决定x大小的主要是a的值,在a的值相同的情况下才考虑c的值

最终求到x后,a=x/M,c=x%M,b=m-c;

dp[i][j]表示以结点i为跟的子树的最优解,j为父节点的放灯状态,j=0表示不放,1表示放。

则在i结点的时候有放和不放两种决策

vector
g[1010];int n,m;int dp[1001][2];int f(int x,int st,int fa){ if(dp[x][st]>=0)return dp[x][st]; int &ans=dp[x][st]; ans=2000; //在这个结点放上等的决策,任何时候都是可行的 for(int i=0;i
View Code

 

转载于:https://www.cnblogs.com/BMan/p/3249844.html

你可能感兴趣的文章
SQL转换为日期的做法
查看>>
Oracle数据库在线重做日志被删除的几种恢复方法
查看>>
主要技术DAS、SAN、NAS
查看>>
exchange 2010 系统补丁
查看>>
mysql主从
查看>>
安装python模块paramkio报错 error: command 'gcc' failed with exit status 1
查看>>
1.1Python快速入门
查看>>
HTML5 canvas 标签介绍:定义图形
查看>>
界面编程-2
查看>>
Android系统的开机画面显示过程分析(1)
查看>>
scanf和缓冲区的一切
查看>>
Linux修改支持高并发TCP连接数
查看>>
自学鸟哥linux服务-samba文件共享服务
查看>>
[笔试面试]单链表如何检测有环,环入口,环长,环前长度——快慢指针法(百度JAVA面试)...
查看>>
为啥使用HTML5
查看>>
PXE无人值守自动安装RHEL5
查看>>
搭建ELK日志分析平台
查看>>
我的友情链接
查看>>
log4cpp编译安装 Centos
查看>>
NOIP提高组第3题(1995-2018)
查看>>