POJ 1155 TELE 背包型树形DP 经典题
由电视台,中转站,和用户的电视组成的体系刚好是一棵树
n个节点,编号分别为1~n,1是电视台中心,2~n-m是中转站,n-m+1~n是用户,1为root
现在节点1准备转播一场比赛,已知从一个节点传送数据到达另一个节点,电视台需要一定的费用
若可以传送数据到达用户的节点n-m+1~n,这些用户各自愿意支付一定的费用给电视台
现在电视台希望在不亏本的情况下为尽量多的用户转播比赛
输出最多可以为多少用户转播比赛
背包类型的树形DP第一题
dp[i][j]表示以节点i为根的子树有j个用户获得转播,电视台的最大收益
由于收益有正有负
初始化:
dp[i][0]=0
dp[i][j]=-inf(j>0)
目标:dp[1][j]>=0的条件下最大的j
(dp[1][j]>=0表示电视台不亏本)
dfs的过程递推dp
有个主意的地方写在了注释
1 #include<cstdio> 2 #include<cstring> 3 4 using namespace std; 5 6 inline int max(int a,int b) 7 { 8 return a>b?a:b; 9 } 10 11 const int maxn=3005; 12 const int inf=0x3f3f3f3f; 13 14 int dp[maxn][maxn]; 15 int cost[maxn][maxn]; 16 int siz[maxn]; 17 struct Edge 18 { 19 int to,next; 20 }; 21 Edge edge[maxn]; 22 int head[maxn]; 23 int tot; 24 int n,m; 25 26 void addedge(int u,int v) 27 { 28 edge[tot].to=v; 29 edge[tot].next=head[u]; 30 head[u]=tot++; 31 } 32 33 void init() 34 { 35 memset(head,-1,sizeof head); 36 tot=0; 37 for(int i=1;i<=n;i++) 38 { 39 dp[i][0]=0; 40 for(int j=1;j<=m;j++) 41 dp[i][j]=-inf; 42 } 43 } 44 45 void solve(); 46 void dfs(int u); 47 48 int main() 49 { 50 while(~scanf("%d",&n)) 51 { 52 scanf("%d",&m); 53 init(); 54 for(int i=1;i<=n-m;i++) 55 { 56 int num; 57 scanf("%d",&num); 58 while(num--) 59 { 60 int u; 61 scanf("%d",&u); 62 scanf("%d",&cost[i][u]); 63 addedge(i,u); 64 } 65 } 66 for(int i=n-m+1;i<=n;i++) 67 { 68 scanf("%d",&cost[i][maxn-1]); 69 } 70 solve(); 71 } 72 return 0; 73 } 74 75 void solve() 76 { 77 dfs(1); 78 for(int j=siz[1];j>=0;j--) 79 { 80 if(dp[1][j]>=0) 81 { 82 printf("%d\n",j); 83 return ; 84 } 85 } 86 /* 87 for(int i=0;i<=siz[1];i++) 88 printf("%d\n",dp[1][i]); 89 */ 90 } 91 92 void dfs(int u) 93 { 94 siz[u]=0; 95 for(int i=head[u];~i;i=edge[i].next) 96 { 97 int v=edge[i].to; 98 if(n-m<v) 99 { 100 dp[v][0]=0; 101 dp[v][1]=cost[v][maxn-1]; 102 siz[v]=1; 103 } 104 else 105 { 106 dfs(v); 107 } 108 siz[u]+=siz[v]; 109 110 //由于更新dp[u][j]的时候 111 //dp[u][j-k]需要表示以u为根的子树,有j-k个是从前面的儿子节点取的 112 //所以这个时候dp[u][j-k]不可以被儿子节点v更新过(保证j-k个都是从前面取的) 113 //所以递推时j要逆推 114 //当然,k和j循环的顺序也就不可以交换了 115 for(int j=siz[u];j>0;j--) 116 { 117 for(int k=1;k<=siz[v];k++) 118 if(j>=k) 119 dp[u][j]=max(dp[u][j],dp[u][j-k]+dp[v][k]-cost[u][v]); 120 } 121 } 122 }
View Code
转载于:https://www.cnblogs.com/-maybe/p/4749155.html
POJ 1155 TELE 背包型树形DP 经典题相关推荐
- HDU 2196 Computer 树形DP经典题
链接:http://acm.hdu.edu.cn/showproblem.php? pid=2196 题意:每一个电脑都用线连接到了还有一台电脑,连接用的线有一定的长度,最后把全部电脑连成了一棵树,问 ...
- poj 1155 TELE
题目描述:... 解法: 树形dp+分组背包. dp[i][j]记录以i为根的子树分配j个用户时的最大收益,cnt[i]记录以i为根的子树有几个叶子节点,对于每个i,背包容量即为cnt[i]的大小. ...
- hdu_Anniversary party_(树形DP入门题)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 题意:有N个人,N-1个人有自己的上司,每个人有一个快乐值,如果这个人参加了聚会,那么这个人的直 ...
- 洛谷P1352 没有上司的舞会(树形DP水题)
题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri, ...
- 树形dp瞎讲+树形dp基础题题解
---恢复内容开始--- 没错 咕了这么久(没有青青姐久 我又开始写博客了( ´▽`) 想了很久些什么(才没有想过呢 虽然被鄙视基础不好但还是走上了树形dp的不归路 那么 就来写写树形dp吧(dtx ...
- 树形dp进阶题2 JSOI2018潜入行动
JSOI2018 潜入行动 题目描述 外星人又双叒叕要攻打地球了,外星母舰已经向地球航行!这一次,JYY 已经联系好了黄金舰队,打算联合所有 JSOIer 抵御外星人的进攻. 在黄金舰队就位之前,JY ...
- POJ - 3342 Party at Hali-Bula(树形dp)
题目链接:点击查看 题目大意:n个人参加聚会,每个人都不想和老板一起参加,问最多可以有多少个人参加,并且判断方案唯一性 题目分析:这个类型的题目这已经是第三个了,状态转移方程都一模一样,不过这个题有点 ...
- 【POJ - 1664】放苹果 (递归经典题 或 dp 或 母函数)
题干: 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. Input 第一行是测试数据的数目t(0 <= t ...
- [洛谷 P4084 USACO17DEC] Barn Painting G (树形dp经典)
[洛谷 P4084 USACO17DEC] Barn Painting G 题目链接 大致题意: 给定一颗N个节点组成的树,3种颜色,其中K个节点已染色,要求任意两相邻节点颜色不同,求合法染色方案数 ...
最新文章
- binlog日志的三种模式
- Xamarin.Forms项目无法添加服务引用
- 马斯克的火箭,这次没!爆!炸!
- Android消息处理机制
- Android .so和.a的makefile
- 瓜子二手车发12月二手车价格:汉兰达奥德赛CR-V保值率居首
- 【POJ - 3169】 Layout(差分约束+spfa)(当板子记?)
- 【树形dp】vijos1144小胖守皇宫
- Vue中全局导入和按需导入的区别
- 小程序中canvas绘制网络图片
- SLAM_四元数取逆-Quaternion Inverse - 已验证
- 如何把PDF锁定,限制修改文档内容?
- php mysql新闻表模板_新闻列表之创建数据库
- 塔勒布《反脆弱》读后感
- 根据价格变化自动识别极值点策略
- 百度分享异步加载问题、分页,无效果解决
- html怎么用css文件怎么打开,css文件用什么打开?
- win7计算机变成英文,我的win7开机选项变成了英文怎么处理
- 《猎罪图鉴》中暴露出人脸识别安全隐患,你的脸或许正被仿冒
- tinymce富文本编辑器的使用
热门文章
- flink背压问题处理(还没弄完)
- gensim在“中文查找(关键词)“与“txt文本“之间做相似度计算(返回最相似的文本)
- class与case class的区别(转载)
- Ubuntu Linux 16.04 xfce下最漂亮的系统字体------文鼎粗钢笔楷体安装记录
- windows下mysql中文乱码_windows下mysql中文乱码, 配置解决方法
- 网络杂谈, Docker, MongoDB
- csv 20位数据 如何打开可以预览完整数字_干货Python Pandas 做数据分析之玩转 Excel 报表分析...
- 文件的上传和下载---学习笔记
- RT-Flash imxrt 系列rt1052 rt1060量产神器宣传
- ios UITableView顶部向下偏移