POJ 1155-TELE(树形背包)
题意:电视台发送信号给很多用户,每个用户(叶子节点)有愿意出的钱,电视台经过的路线都有一定费用,求电视台不损失的情况下最多给多少用户发送信号。
分析:问题与以i为根节点的子树所包含的叶子数
#include <map>
#include <set>
#include <list>
#include <cmath>
#include <queue>
#include <stack>
#include <cstdio>
#include <vector>
#include <string>
#include <cctype>
#include <complex>
#include <cassert>
#include <utility>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
typedef pair<int,int> PII;
typedef long long ll;
#define lson l,m,rt<<1
#define pi acos(-1.0)
#define rson m+1,r,rt<<11
#define All 1,N,1
#define read freopen("in.txt", "r", stdin)
const ll INFll = 0x3f3f3f3f3f3f3f3fLL;
const int INF= 0x7ffffff;
const int mod = 1000000007;
struct tree{
int e,v,next;
}t[6010];
int dp[3100][3100],num[3100],tmp[3100],head[3100],len;
int n,m;
void add(int a,int b,int v){
t[len].e=b;
t[len].v=v;
t[len].next=head[a];
head[a]=len++;
}
void dfs(int root){
for(int i=head[root];i!=-1;i=t[i].next){
int son=t[i].e;
dfs(son);
for(int j=0;j<=num[root];++j)//把由前几个子树所得存起来,避免后面计算相互影响
tmp[j]=dp[root][j];
for(int j=0;j<=num[root];++j)
for(int k=0;k<=num[son];++k)
{
dp[root][j+k]=max(dp[root][j+k],tmp[j]+dp[son][k]-t[i].v);
}
num[root]+=num[son];
}
}
int main()
{
while(~scanf("%d%d",&n,&m)){
int k,a,b;
len=0;
memset(head,-1,sizeof(head));
for(int i=1;i<=n-m;++i)
{
scanf("%d",&k);
num[i]=0;
while(k--){
scanf("%d%d",&a,&b);
add(i,a,b);
}
}
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
dp[i][j]=-INF;
for(int i=n-m+1;i<=n;++i){
num[i]=1;
scanf("%d",&dp[i][1]);
}
dfs(1);
for(int i=m;i>=0;--i)
if(dp[1][i]>=0){
printf("%d\n",i);
break;
}
}
return 0;
}
有关,则dp[i][j]表示以i为根的子树,包含j个用户所剩余的钱数。
POJ 1155-TELE(树形背包)的更多相关文章
- [POJ 1155] TELE (树形dp)
题目链接:http://poj.org/problem?id=1155 题目大意:电视台要广播电视节目,要经过中转机构,到观众.从电视台到中转商到观众是一个树形结构,经过一条边需要支付成本.现在给你每 ...
- poj 1155 TELE (树形背包dp)
本文出自 http://blog.csdn.net/shuangde800 题目链接: poj-1155 题意 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构, ...
- [POJ 1155] TELE
TELE Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3787 Accepted: 2007 Description ...
- [POJ1155]TELE(树形背包dp)
看到这道题的第一眼我把题目看成了TLE 哦那不是重点 这道题是树形背包dp的经典例题 题目描述(大概的): 给你一棵树,每条边有一个cost,每个叶节点有一个earn 要求在earn的和大于等于cos ...
- POJ 1155 TELE 背包型树形DP 经典题
由电视台,中转站,和用户的电视组成的体系刚好是一棵树 n个节点,编号分别为1~n,1是电视台中心,2~n-m是中转站,n-m+1~n是用户,1为root 现在节点1准备转播一场比赛,已知从一个节点传送 ...
- POJ 1155 TELE (树形DP,树形背包)
题意:给定一棵树,n个节点,其中有m个叶子表示的是用户,其他点表示中转器, 每条边都有权值,每个用户i愿意给的钱w[i],问如果在不亏钱的情况下能为多少用户转播足球比赛? 思路: 其实就是要选出部分叶 ...
- POJ 1155 - TELE 树型DP(泛化背包转移)..
dp[x][y]代表以x为根的子树..连接了y个终端用户(叶子)..所能获得的最大收益... dp[x][ ]可以看成当根为x时..有个背包空间为0~m...每个空间上记录了到到达这个空间的最大收益. ...
- poj 1155 TELE(树形DP)
TELE Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4863 Accepted: 2673 Description ...
- POJ 1155 TELE [树状DP]
题意:略. 思路:用dp[i][k]来表示结点i给k个用户提供节目时的最大盈利(可能为负). 则递推方程为: dp[i][j] = max(dp[i][j], dp[i][m] + dp[v][j-m ...
- POJ-1155 TELE 树形背包dp
dp[u][i]代表以u为根的子树选i个叶子的最大收益 那么dp[u][i]=max(dp[u][i],dp[v][k]+dp[u][i-k]-len) (1=<k<=i) 细节看代码: ...
随机推荐
- 微软职位内部推荐-Principal Dev Manager for Windows Phone Apps
微软近期Open的职位: Location: China, BeijingDivision: Operations System Group Engineering Group OverviewOSG ...
- c++ string char* const char*
#include <iostream> #include <string> #include <cstring> using namespace std; int ...
- 使用Redis构建简单的ORM
Reids相关的资料引用 http://www.tuicool.com/articles/bURJRj [Reids各种数据类型的应用场景] https://github.com/antirez/re ...
- hdu 3952
因为一个小错 不过 好不爽........ #include <iostream> #include <fstream> using namespace std; struc ...
- firefly笔记一之http模块
原地址:http://www.9miao.com/question-15-54380.html Firefly是免费开源的游戏服务器端框架,开发语言是python,基于twisted框架开发,作为一名 ...
- python time模块详解
python time模块详解 转自:http://blog.csdn.net/kiki113/article/details/4033017 python 的内嵌time模板翻译及说明 一.简介 ...
- STL,ATL,WTL之间的联系和区别
STL即 Standard Template Library (标准模板库) STL是惠普实验室开发的一系列软件的统称.它是由Alexander Stepanov.Meng Lee和David R M ...
- JNDI:对java:comp/env的研究
这两天研究了一下 context.lookup("java:comp/env/XXX")和直接context.lookup("XXX")的区别 网上关于这两个的 ...
- Pig安装及简单使用(pig版本0.13.0,Hadoop版本2.5.0)
原文地址:http://www.linuxidc.com/Linux/2014-03/99055.htm 我们用MapReduce进行数据分析.当业务比较复杂的时候,使用MapReduce将会是一个很 ...
- C#基础精华02(静态类,值类型,引用类型,枚举,结构,ref与out)
静态类 静态类不能被其他类继承,静态成员亦不能被继承(访问的是同一个),备注1. 静态类只能继承自Object类.(静态类不能继承自其它类.) 继承(多态).静态本身就是相反的. 静态类不能实现任何接 ...