[POJ 1155] TELE (树形dp)
题目链接:http://poj.org/problem?id=1155
题目大意:电视台要广播电视节目,要经过中转机构,到观众。从电视台到中转商到观众是一个树形结构,经过一条边需要支付成本。现在给你每两个节点之间传播的成本,给你每个观众会付的钱,问你电视台在不亏本的情况下最多能给多少个观众看节目。
这是我的第一道树形dp。。无耻的看了题解。。
设计状态:dp[u][i]代表以u为根的子树中有i个观众,能够得到的最大收入。
状态转移:dp[u][i] = max(dp[u][i],dp[u][i-j]+dp[v][j]-cost[u][v]);
用java写了一个版本。。总是RE,就不知道是为什么了。。
代码:
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std; const int MAX_N = ;
const int INF = ;
struct EDGE{
int to,cost;
int next;
};
EDGE edge[MAX_N<<];
int ptr,head[MAX_N];
int cost[MAX_N]; void init(){
memset(edge,-,sizeof(edge));
memset(head,-,sizeof(head));
ptr = ;
} void add_edge(int from,int to,int cost){
edge[ptr].to = to;
edge[ptr].cost = cost;
edge[ptr].next = head[from];
head[from] = ptr++;
} int N,M;
int dp[MAX_N][MAX_N];
bool vis[MAX_N];
int sum[MAX_N]; void DP(int u){
if( vis[u] ) return;
vis[u] = true; dp[u][] = ;
int tot = ; for(int i=head[u];~i;i=edge[i].next){
int v = edge[i].to;
if( !vis[v] ){
tot++;
DP( v );
sum[u] += sum[v];
}
} if( tot== ){
sum[u] = ;
dp[u][] = cost[u];
} else {
for(int k=head[u];~k;k=edge[k].next){
int v = edge[k].to;
for(int j=sum[u];j>=;--j){
for(int i=;i<=sum[v];i++){
if( j>=i && dp[u][j-i]!=-INF && dp[v][i]!=-INF){
dp[u][j] = max(dp[u][j],dp[u][j-i]+dp[v][i]-edge[k].cost);
}
}
}
}
}
} int main(){
while(scanf("%d%d",&N,&M)!=EOF){
init();
int k;
for(int i=;i<=N-M;i++){
scanf("%d",&k);
for(int j=;j<k;j++){
int a,c;
scanf("%d%d",&a,&c);
add_edge(i,a,c);
add_edge(a,i,c);
}
} for(int i=N-M+;i<=N;i++){
scanf("%d",&cost[i]);
} memset(vis,,sizeof(vis));
memset(sum,,sizeof(sum));
for(int i=;i<=N;i++){
for(int j=;j<=N;j++){
dp[i][j] = -INF;
}
}
DP();
for(int i=N;i>=;--i){
if( dp[][i] >= ) {
printf("%d\n",i);
break;
}
} }
return ;
}
[POJ 1155] TELE (树形dp)的更多相关文章
- POJ 1155 TELE 背包型树形DP 经典题
由电视台,中转站,和用户的电视组成的体系刚好是一棵树 n个节点,编号分别为1~n,1是电视台中心,2~n-m是中转站,n-m+1~n是用户,1为root 现在节点1准备转播一场比赛,已知从一个节点传送 ...
- Apple Tree POJ - 2486 (树形dp)
题目链接: D - 树形dp POJ - 2486 题目大意:一颗树,n个点(1-n),n-1条边,每个点上有一个权值,求从1出发,走V步,最多能遍历到的权值 学习网址:https://blog.c ...
- Anniversary party POJ - 2342 (树形DP)
题目链接: POJ - 2342 题目大意:给你n个人,然后每个人的重要性,以及两个人之间的附属关系,当上属选择的时候,他的下属不能选择,只要是两个人不互相冲突即可.然后问你以最高领导为起始点的关系 ...
- POJ 3107.Godfather 树形dp
Godfather Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7536 Accepted: 2659 Descrip ...
- POJ 3342 (树形DP)
题意 :给出一些上下级关系,要求i和i的直接上级不能同时出现,现在选出一些人构成一个集合,问你这个集合里面的最大人数是都少,同时给出这个最大的人数的集合是否唯一. 思路:树形DP,dp[i][0],表 ...
- POJ 2342 (树形DP)
Anniversary party Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3863 Accepted: 2172 ...
- POJ Anniversary party 树形DP
/* 树形dp: 给一颗树,要求一组节点,节点之间没有父子关系,并且使得所有的节点的权值和最大 对于每一个节点,我们有两种状态 dp[i][0]表示不选择节点i,以节点i为根的子树所能形成的节点集所能 ...
- poj 1155 TELE(树形DP)
TELE Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4863 Accepted: 2673 Description ...
- poj 1155 TELE (树形背包dp)
本文出自 http://blog.csdn.net/shuangde800 题目链接: poj-1155 题意 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构, ...
随机推荐
- android数据存储之SharedPreferences
一.SharedPreferences简介 (1)SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置,比如Activity状态,Activ ...
- scanf与scanf_s
scanf的使用 使用scanf需要记住下面两条简单规则: 如果使用scanf来读取某种基本变量类型(%d,%c,%f,%lf)的值,请在变量名之前加上一个& 如果使用scanf把一个字符串( ...
- SQL SERVER 复制相关存储过程
适用于所有类型复制的过程 过程 说明 sp_addscriptexec 向发布的所有订阅服务器发布 Microsoft SQL Server 脚本(.sql 文件). sp_adjustpublish ...
- My second "last working day"
时间真快,转眼硕士毕业已经快8年了. 今天是我的第二个last working day.也是我即将结束在外企工作的节点. 说来,毕业的时候,找工作,在确定了最后要去的单位之前,手头已经拿过了10家单位 ...
- ORACLE的表被 另一个用户锁定,如何解除..
SELECT object_name, machine, s.sid, s.serial# FROM gv$locked_object l, dba_objects o, gv$session s W ...
- [ZZ] MATLAB中Legend的一些控制方法
http://www.eetop.cn/blog/html/03/6503-23349.html 如果一个图中我们画了n条曲线,但是我们只想加图例说明(legend)的只有m条 (m<n).网上 ...
- POJ #1015 - Jury Compromise - TODO: POJ website issue
(poj.org issue. Not submitted yet) This is a 2D DP problem, very classic too. Since I'm just learnin ...
- 【转】java 自动装箱与拆箱
java 自动装箱与拆箱 这个是jdk1.5以后才引入的新的内容,作为秉承发表是最好的记忆,毅然决定还是用一篇博客来代替我的记忆: java语言规范中说道:在许多情况下包装与解包装是由编译器自行完成的 ...
- android学习笔记24——事件处理
事件处理 android提供了两种事件处理机制: 1.基于回调的事件处理 2.基于监听器的事件处理(通过绑定特定事件监听器) 注意: android对于基于回调的事件处理而言,主要做法就是重写andr ...
- 常用的邮箱服务器(SMTP、POP3)地址、端口
常用的邮箱服务器(SMTP.POP3)地址.端口 gmail(google.com) POP3服务器地址:pop.gmail.com(SSL启用 端口:995) SMTP服务器地址:smtp.gm ...