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

本文共 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

你可能感兴趣的文章
Python数据结构——双端队列
查看>>
GitHub 项目推荐:用深度学习让你的照片变得美丽 ...
查看>>
2.HtmlAgilityPack 爬取优酷电影名进阶(所有分类+多线程)
查看>>
Rails 6.0.0 beta2 发布,开源 Web 应用框架
查看>>
Nginx 加/的区别
查看>>
UWP 大爆炸你个锤子
查看>>
Confluence 6 空间
查看>>
Kubernetes下一站,要做云的“分布式”Linux?
查看>>
Java性能优化的50个细节(珍藏版)
查看>>
[译]聊聊C#中的泛型的使用(新手勿入)
查看>>
【对讲机的那点事】灵通LD3000H数字对讲机不能读写频率咋办?
查看>>
企业可以自己搭建堡垒机吗?如何搭建堡垒机?
查看>>
字符串反转
查看>>
大型分布式系统中的缓存架构
查看>>
【对讲机的那点事】物联卡与手机SIM卡的区别!
查看>>
【对讲机的那点事】公网对讲机初次办理物联网卡应注意哪些问题?
查看>>
移动APP持续交付系列之云构建价值分析
查看>>
最后的 Windows XP,也将在 4 月 9 日退役
查看>>
list set array map 排序问题
查看>>
操作系统复习题-第四章 存储器管理
查看>>