洛谷 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 题意:一棵树,叶子节点是用户,每天边有一个权值表示花费,每一个用户有一个值表示他们会交的钱. 问在不亏本的 ...
随机推荐
- ps批量修改图片
批量更改图片尺寸的ps脚本 高端干货!PHOTOSHOP实用脚本大合集
- 解决Maven中Missing artifact javax.jms:jms:jar:1.1:compile
搭建好项目后报错: Missing artifact javax.jms:jms:jar:1.1:compile 于POM.xml中 解决方案: 一 :在nexus中配置一个代理仓库 地址为 ...
- C#,Java,C++中的finally关键字
博客原文:http://hankjin.blog.163.com/blog/static/33731937201031511305338/ 先说C++,标准C++不支持finally, 如果要实现fi ...
- javascript design patterns
http://jsdesignpatterns.com/ http://www.joezimjs.com/tag/design-patterns/ http://codecube.net/#archi ...
- SharePoint Designer cannot open site error " the server could not complete your request"
3.SPD cannot open site, in the log :Error when open web service: System.InvalidOperationException: A ...
- 用expect实现自动输入SSH的SCP信息,且不需要另外的文件
#!/bin/sh ] ; then echo "USAGE: $0 remote_ip serverXXXXX" echo " e.g.: $0 1.2.3.4 ser ...
- 趁有空,再了解一下GROOVY中关于类的通例
简单的,浅浅的看一下. 想起了RUBY里覆盖类的方法... 在GROOVY里也同样提到了,比如TOSTRING... (其实,在我以前的经验中,从未用过这些东东..:)) 这样用了PACKAGE,显得 ...
- (转载)Linux定时任务cron配置
(转载)http://blog.csdn.net/jbgtwang/article/details/7995801 实现linux定时任务有:cron.anacron.at等,这里主要介绍cron服务 ...
- 数学(莫比乌斯反演):HAOI 2011 问题B
题目描述: 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. 输入格式: 第一行一个整数n,接下来n ...
- 如何在不影响数据库的正常使用的情况下得到数据的完整.mdf和.ldf文
一:完整备份数据库 二:还原数据库 四:分离数据库即可得到.mdf和.ldf文件