1. /*
  2. 想了半天没想出状态 自己还是太弱了 QAQ
  3. 题目问的是最多供给多少户 一般想法是把这个值定义为状态量
  4. 没想出来QAQ....看了看题解的状态 很机智....
  5. f[i][j]表示i的子树 选了j个叶子的最大收益
  6. 这样 不亏本就是收益>=0
  7. 转移的话 先搜一下这个子树有几个叶子 然后枚举儿子
  8. 枚举当前儿子分几个叶子 这里的枚举顺序有套路
  9. 从大到小枚举i分几个 从小到大枚举j分几个
  10. 这样可以避免 重复选择
  11. 注意初始化
  12. */
  13. #include<iostream>
  14. #include<cstdio>
  15. #include<cstring>
  16. #define maxn 3010
  17. using namespace std;
  18. int n,m,p,head[maxn],num,f[maxn][maxn],ans,c[maxn];
  19. struct node{
  20. int v,t,pre;
  21. }e[maxn];
  22. void Add(int from,int to,int dis){
  23. num++;e[num].v=to;
  24. e[num].t=dis;
  25. e[num].pre=head[from];
  26. head[from]=num;
  27. }
  28. int Dfs(int u)
  29. {
  30. if(u>p){
  31. f[u][]=c[u];
  32. return ;
  33. }
  34. int s=;
  35. for(int i=head[u];i;i=e[i].pre){
  36. int v=e[i].v;
  37. int x=Dfs(v);s+=x;
  38. for(int j=s;j>=;j--)
  39. for(int k=;k<=x;k++)
  40. f[u][j]=max(f[u][j],f[u][j-k]+f[v][k]-e[i].t);
  41. }
  42. return s;
  43. }
  44. int main()
  45. {
  46. scanf("%d%d",&n,&m);p=n-m;
  47. for(int i=;i<=p;i++){
  48. int x,y,z;
  49. scanf("%d",&x);
  50. for(int j=;j<=x;j++){
  51. scanf("%d%d",&y,&z);
  52. Add(i,y,z);
  53. }
  54. }
  55. for(int i=p+;i<=n;i++)
  56. scanf("%d",&c[i]);
  57. memset(f,-/,sizeof(f));
  58. for(int i=;i<=n;i++)
  59. f[i][]=;
  60. Dfs();
  61. for(int i=;i<=m;i++)
  62. if(f[][i]>=)ans=max(ans,i);
  63. printf("%d\n",ans);
  64. return ;
  65. }

洛谷 P1273 有线电视网(dp)的更多相关文章

  1. 洛谷 P1273 有线电视网

    2016-05-31 13:25:45 题目链接: 洛谷 P1273 有线电视网 题目大意: 在一棵给定的带权树上取尽量多的叶子节点,使得sigma(val[选择的叶子节点])-sigma(cost[ ...

  2. 洛谷 P1273 有线电视网(树形背包)

    洛谷 P1273 有线电视网(树形背包) 干透一道题 题面:洛谷 P1273 本质就是个背包.这道题dp有点奇怪,最终答案并不是dp值,而是最后遍历寻找那个合法且最优的\(i\)作为答案.dp值存的是 ...

  3. 洛谷P1273 有线电视网 (树上分组背包)

    洛谷P1273 有线电视网 题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树的内部节 ...

  4. 洛谷P1273 有线电视网 树上分组背包DP

    P1273 有线电视网 )逼着自己写DP 题意:在一棵树上选出最多的叶子节点,使得叶子节点的值 减去 各个叶子节点到根节点的消耗 >= 0: 思路: 树上分组背包DP,设dp[u][k] 表示 ...

  5. 【题解】洛谷P1273 有线电视网(树上分组背包)

    次元传送门:洛谷P1273 思路 一开始想的是普通树形DP 但是好像实现不大好 观摩了一下题解 是树上分组背包 设f[i][j]为以i为根的子树中取j个客户得到的总价值 我们可以以i为根有j组 在每一 ...

  6. 洛谷——P1273 有线电视网

    P1273 有线电视网 题目大意: 题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树 ...

  7. C++ 洛谷 P1273 有线电视网 题解

     P1273 有线电视网  很明显,这是一道树形DP(图都画出来了,还不明显吗?) 未做完,持续更新中…… #include<cstdio> #include<cstring> ...

  8. 洛谷P1273 有线电视网 【树上分组背包】

    题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树的内部节点. 从转播站到转播站以及从 ...

  9. 洛谷P1273 有线电视网【树形dp】

    题目:https://www.luogu.org/problemnew/show/P1273 题意:一棵树,叶子节点是用户,每天边有一个权值表示花费,每一个用户有一个值表示他们会交的钱. 问在不亏本的 ...

随机推荐

  1. [r]How To Use Git To Create A Key

    怎样生成公钥(via) 工作流程 安装设置 git 下载最新版本的git http://git-scm.com/downloads 当你安装完成git的时候,你需要简单的配置一下,打开终端: 用户名 ...

  2. asp.net 导入

    开发项目过程中会遇到各种各样的项目需求,我现在遇到的问题是每个部门有不同的excel文件类型,他们每个部门每个文件类型上传成功之后都会在数据库中产生表,表的列名是你excel第一行数据,其他行作为表的 ...

  3. bzoj2687: 交与并

    Description     对于一个区间集合{A1,A2……AK}(K>1,Ai<>Aj{i<>j}),我们定义其权值           W=|A1∪A2∪……∪A ...

  4. Windows Phone 8 SQL Server CE 数据库

    员工信息表 EmployeeTable.cs using System.Data.Linq.Mapping; using System.ComponentModel; namespace SQLSer ...

  5. SaltStack Syndic配置

    参考URL: http://www.ttlsa.com/saltstack/saltstack-syndic-example/ 虽然中心master看不到 minion的key 但是还是可以直接指导m ...

  6. 模态运行EXE程序

    function ExecShowModal(APath: PChar; ACmdShow: Integer; ATimeout: Longword): Integer; var vStartupIn ...

  7. Spring的OpenEntityManagerInViewFilter

    在Java Web项目中使用Hibernate经常会遇到LazyInitializationException .这是因为controller和model层(java代码)将通过JPA的一些启用了延迟 ...

  8. Maven实战一

    转载:http://www.iteye.com/topic/1123221 1. 用Maven 命令创建一个简单的Maven项目 在cmd中运行如下命令: Cmd代码 mvn archetype:ge ...

  9. webserver/CGI

    来自:http://blog.sina.com.cn/s/blog_466c6640010000nj.html   1. TUX2. lighttpd,thttpd,shttpd 3. 几种web s ...

  10. 后缀数组:HDU1043 Longest Common Substring

    Longest Common Substring Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java ...