题意:略。

思路:用dp[i][k]来表示结点i给k个用户提供节目时的最大盈利(可能为负)。

则递推方程为: dp[i][j] = max(dp[i][j], dp[i][m] + dp[v][j-m] - cost)

其中v为i的孩子,cost为i向v提供节目的花费。

另外注意代码里dp过程的这几行

         for (int j = num[x]; j >= ; j--)
for (int k = ; k <= num[v]; k++)
dp[x][j+k] = max(dp[x][j+k], dp[x][j] + dp[v][k] - edge[i].w);

假设当前正考虑的孩子结点是v,则孩子1...(v-1)覆盖的用户数量为num[x],即i已经考虑过的用户数量。在这里枚举时需要从大到小枚举,不然可能j=1的情况会影响到j=2的情况。另一种处理方法就是,将结点i所有的dp[i][j]值每次都先用tem[j]另存起来,dp时直接用tem[j],这样就不需要考虑枚举的顺序了。

 #include<stdio.h>
#include<string.h>
#include<algorithm>
#define maxn 3005
#define inf 0x3f3f3f3f
using namespace std;
struct node
{
int v, w, next;
}edge[maxn];
int num_edge, head[maxn];
void init_edge()
{
num_edge = ;
memset(head, -, sizeof(head));
}
void addedge(int a,int b,int c)
{
edge[num_edge].v = b;
edge[num_edge].w = c;
edge[num_edge].next = head[a];
head[a] = num_edge++;
} int n, m, num[maxn], dp[maxn][maxn];
void dfs(int x)
{
for (int i = head[x]; i != -; i = edge[i].next)
{
int v = edge[i].v;
dfs(v);
for (int j = num[x]; j >= ; j--)
for (int k = ; k <= num[v]; k++)
dp[x][j+k] = max(dp[x][j+k], dp[x][j] + dp[v][k] - edge[i].w);
num[x] += num[v];//x结点已经考虑过的用户数
}
}
int main()
{
//freopen("data.in", "r", stdin);
scanf("%d%d", &n, &m);
init_edge();
for (int i = ; i <= n - m; i++)
{
num[i] = ;//i已经考虑过的用户数量为0
int k;
scanf("%d", &k);
while (k--)
{
int b, c;
scanf("%d%d", &b, &c);
addedge(i, b, c);
}
}
for (int i = ; i <= n; i++)
for (int j = ; j <= m; j++)
dp[i][j] = -inf;
for (int i = n - m + ; i <= n; i++)
{
num[i] = ;
scanf("%d", &dp[i][]);
}
dfs();
for (int i = m; i >= ; i--) if (dp[][i] >= )
{
printf("%d\n", i);
break;
}
return ;
}

POJ 1155 TELE [树状DP]的更多相关文章

  1. POJ 1155 - TELE 树型DP(泛化背包转移)..

    dp[x][y]代表以x为根的子树..连接了y个终端用户(叶子)..所能获得的最大收益... dp[x][ ]可以看成当根为x时..有个背包空间为0~m...每个空间上记录了到到达这个空间的最大收益. ...

  2. poj 1155 TELE(树形DP)

    TELE Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4863   Accepted: 2673 Description ...

  3. POJ 1155 TELE (树形DP,树形背包)

    题意:给定一棵树,n个节点,其中有m个叶子表示的是用户,其他点表示中转器, 每条边都有权值,每个用户i愿意给的钱w[i],问如果在不亏钱的情况下能为多少用户转播足球比赛? 思路: 其实就是要选出部分叶 ...

  4. 树状DP (poj 2342)

    题目:Anniversary party 题意:给出N各节点的快乐指数,以及父子关系,求最大快乐指数和(没人职员愿意跟直接上司一起玩): 思路:从底向上的树状DP: 第一种情况:第i个员工不参与,F[ ...

  5. poj 2342 Anniversary party_经典树状dp

    题意:Ural大学有n个职员,1~N编号,他们有从属关系,就是说他们关系就像一棵树,父节点就是子节点的直接上司,每个职员有一个快乐指数,现在要开会,职员和职员的直接上司不能同时开会,问怎才能使开会的快 ...

  6. poj3659树状DP

    Cell Phone Network Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6273   Accepted: 225 ...

  7. hdu 1561 The more, The Better_树状dp

    题目链接 题意:给你一棵树,各个节点都有价值(除根节点),从根节点出发,选择m个节点,问最多的价值是多小. 思路:很明显是树状dp,遍历树时背包最优价值,dp[i][k]=max{dp[i][r]+d ...

  8. 树状DP HDU1520 Anniversary party

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 题意:职员之间有上下级关系,每个职员有自己的happy值,越高在派对上就越能炒热气氛.但是必须是 ...

  9. [Codeforces743D][luogu CF743D]Chloe and pleasant prizes[树状DP入门][毒瘤数据]

    这个题的数据真的很毒瘤,身为一个交了8遍的蒟蒻的呐喊(嘤嘤嘤) 个人认为作为一个树状DP的入门题十分合适,同时建议做完这个题之后再去做一下这个题 选课 同时在这里挂一个选取节点型树形DP的状态转移方程 ...

随机推荐

  1. Diycode开源项目 UserActivity分析

    1.效果预览 1.1.实际界面预览 1.2. 这是MainActivity中的代码 这里执行了跳转到自己的用户界面的功能. 1.3.点击头像或者用户名跳转到别人的页面 UserActivity的结构由 ...

  2. 数据预处理之独热编码(One-Hot Encoding)

    问题的由来 在很多机器学习任务中,特征并不总是连续值,而有可能是分类值. 例如,考虑以下三个特征: ["male","female"] ["from ...

  3. laravel5.2总结--服务容器(依赖注入,控制反转)

    1.依赖 我们定义两个类:class Supperman 和 class Power,现在我们要使用Supperman ,而Supperman 依赖了Power class Supperman { p ...

  4. leetcode 【 Pascal's Triangle II 】python 实现

    题目: Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [ ...

  5. C++模板编程-模板基础重点

    模板基础 1.模板参数自动推导,如果是已知的参数类型与个数,这调用模板时可以不写类型. Cout<<max<int>(1,3);可以写为Cout<<max(1,3) ...

  6. [转载]robotium脚本封装为APK,实现脱离手机数据线,使用按钮点击控制用例

    原文地址:robotium脚本封装为APK,实现脱离手机数据线,使用按钮点击控制用例运行作者:机器,猫 最近一直在完成一些robotium的小功能,用来更方便的完成一些小功能的测试,或者可以说用来娱乐 ...

  7. Leetcode 518.零钱兑换II

    零钱兑换II 给定不同面额的硬币和一个总金额.写出函数来计算可以凑成总金额的硬币组合数.假设每一种面额的硬币有无限个. 注意: 你可以假设 0 <= amount (总金额) <= 500 ...

  8. TextBox的值随dropdownlist值而变化

    转自:http://bytes.com/topic/asp-net/answers/443065-textbox-value-change-select-other-item-dropdownlist ...

  9. [oldboy-django][4python面试]有关csrf跨站伪造请求攻击

    1 csrf定义 - csrf定义:Cross Site Request Forgery,跨站请求伪造 举例来说: 网站A伪造了一个图片链接: <a href="http://www. ...

  10. [oldboy-django][4python面试]有关yield那些事

    1 yield 在使用send, next时候的区别(举例m = yield 5) 无论send,next首先理解m = yield 5 是将表达式"yield 5 "的结果返回给 ...