洛谷 P1273 有线电视网(dp)
- /*
- 想了半天没想出状态 自己还是太弱了 QAQ
- 题目问的是最多供给多少户 一般想法是把这个值定义为状态量
- 没想出来QAQ....看了看题解的状态 很机智....
- f[i][j]表示i的子树 选了j个叶子的最大收益
- 这样 不亏本就是收益>=0
- 转移的话 先搜一下这个子树有几个叶子 然后枚举儿子
- 枚举当前儿子分几个叶子 这里的枚举顺序有套路
- 从大到小枚举i分几个 从小到大枚举j分几个
- 这样可以避免 重复选择
- 注意初始化
- */
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #define maxn 3010
- using namespace std;
- int n,m,p,head[maxn],num,f[maxn][maxn],ans,c[maxn];
- struct node{
- int v,t,pre;
- }e[maxn];
- void Add(int from,int to,int dis){
- num++;e[num].v=to;
- e[num].t=dis;
- e[num].pre=head[from];
- head[from]=num;
- }
- int Dfs(int u)
- {
- if(u>p){
- f[u][]=c[u];
- return ;
- }
- int s=;
- for(int i=head[u];i;i=e[i].pre){
- int v=e[i].v;
- int x=Dfs(v);s+=x;
- for(int j=s;j>=;j--)
- for(int k=;k<=x;k++)
- f[u][j]=max(f[u][j],f[u][j-k]+f[v][k]-e[i].t);
- }
- return s;
- }
- int main()
- {
- scanf("%d%d",&n,&m);p=n-m;
- for(int i=;i<=p;i++){
- int x,y,z;
- scanf("%d",&x);
- for(int j=;j<=x;j++){
- scanf("%d%d",&y,&z);
- Add(i,y,z);
- }
- }
- for(int i=p+;i<=n;i++)
- scanf("%d",&c[i]);
- memset(f,-/,sizeof(f));
- for(int i=;i<=n;i++)
- f[i][]=;
- Dfs();
- for(int i=;i<=m;i++)
- if(f[][i]>=)ans=max(ans,i);
- printf("%d\n",ans);
- return ;
- }
洛谷 P1273 有线电视网(dp)的更多相关文章
- 洛谷 P1273 有线电视网
2016-05-31 13:25:45 题目链接: 洛谷 P1273 有线电视网 题目大意: 在一棵给定的带权树上取尽量多的叶子节点,使得sigma(val[选择的叶子节点])-sigma(cost[ ...
- 洛谷 P1273 有线电视网(树形背包)
洛谷 P1273 有线电视网(树形背包) 干透一道题 题面:洛谷 P1273 本质就是个背包.这道题dp有点奇怪,最终答案并不是dp值,而是最后遍历寻找那个合法且最优的\(i\)作为答案.dp值存的是 ...
- 洛谷P1273 有线电视网 (树上分组背包)
洛谷P1273 有线电视网 题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树的内部节 ...
- 洛谷P1273 有线电视网 树上分组背包DP
P1273 有线电视网 )逼着自己写DP 题意:在一棵树上选出最多的叶子节点,使得叶子节点的值 减去 各个叶子节点到根节点的消耗 >= 0: 思路: 树上分组背包DP,设dp[u][k] 表示 ...
- 【题解】洛谷P1273 有线电视网(树上分组背包)
次元传送门:洛谷P1273 思路 一开始想的是普通树形DP 但是好像实现不大好 观摩了一下题解 是树上分组背包 设f[i][j]为以i为根的子树中取j个客户得到的总价值 我们可以以i为根有j组 在每一 ...
- 洛谷——P1273 有线电视网
P1273 有线电视网 题目大意: 题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树 ...
- C++ 洛谷 P1273 有线电视网 题解
P1273 有线电视网 很明显,这是一道树形DP(图都画出来了,还不明显吗?) 未做完,持续更新中…… #include<cstdio> #include<cstring> ...
- 洛谷P1273 有线电视网 【树上分组背包】
题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树的内部节点. 从转播站到转播站以及从 ...
- 洛谷P1273 有线电视网【树形dp】
题目:https://www.luogu.org/problemnew/show/P1273 题意:一棵树,叶子节点是用户,每天边有一个权值表示花费,每一个用户有一个值表示他们会交的钱. 问在不亏本的 ...
随机推荐
- [r]How To Use Git To Create A Key
怎样生成公钥(via) 工作流程 安装设置 git 下载最新版本的git http://git-scm.com/downloads 当你安装完成git的时候,你需要简单的配置一下,打开终端: 用户名 ...
- asp.net 导入
开发项目过程中会遇到各种各样的项目需求,我现在遇到的问题是每个部门有不同的excel文件类型,他们每个部门每个文件类型上传成功之后都会在数据库中产生表,表的列名是你excel第一行数据,其他行作为表的 ...
- bzoj2687: 交与并
Description 对于一个区间集合{A1,A2……AK}(K>1,Ai<>Aj{i<>j}),我们定义其权值 W=|A1∪A2∪……∪A ...
- Windows Phone 8 SQL Server CE 数据库
员工信息表 EmployeeTable.cs using System.Data.Linq.Mapping; using System.ComponentModel; namespace SQLSer ...
- SaltStack Syndic配置
参考URL: http://www.ttlsa.com/saltstack/saltstack-syndic-example/ 虽然中心master看不到 minion的key 但是还是可以直接指导m ...
- 模态运行EXE程序
function ExecShowModal(APath: PChar; ACmdShow: Integer; ATimeout: Longword): Integer; var vStartupIn ...
- Spring的OpenEntityManagerInViewFilter
在Java Web项目中使用Hibernate经常会遇到LazyInitializationException .这是因为controller和model层(java代码)将通过JPA的一些启用了延迟 ...
- Maven实战一
转载:http://www.iteye.com/topic/1123221 1. 用Maven 命令创建一个简单的Maven项目 在cmd中运行如下命令: Cmd代码 mvn archetype:ge ...
- webserver/CGI
来自:http://blog.sina.com.cn/s/blog_466c6640010000nj.html 1. TUX2. lighttpd,thttpd,shttpd 3. 几种web s ...
- 后缀数组:HDU1043 Longest Common Substring
Longest Common Substring Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...