题目链接:https://vjudge.net/problem/POJ-1155

题意:给定一颗以1为根的边权树,有n个结点,其中m个叶子结点,每个叶子结点有一个价值。要求从m个叶子结点中选最多的结点,费用是从根节点到叶子结点的边权和,价值是所有选中的叶子结点价值和。

思路:

  树上分组背包。用dp[u][j]表示对于结点u的子树,选j个叶子结点的最大利润,即价值-花费。因为对u的每个子结点v1,v2,v3,在v1的子树中最多选择一种方案,不可能重叠选择,所以是分组背包。先处理出num[u],表示结点u的子树中叶子结点的个数。

  那么对于叶子结点u:dp[u][j]=a[u](a[u]是叶子结点u的价值)

    对于非叶子结点u:dp[u][j]=max(dp[u][j] , dp[u][j-k]+dp[v][k]-len),其中j是最大容量,k是枚举的容量。

  dp数组初始化为负无穷,因为一条利润为负数的方案在后面也可以和另一条利润正的方案合并,最终利润仍为正。

#include<cstdio>
#include<algorithm>
using namespace std; const int maxn=;
const int ninf=0xcfcfcfcf;
int n,m,head[maxn],a[maxn],cnt,dp[maxn][maxn],num[maxn]; struct node{
int v,w,nex;
}edge[maxn]; void adde(int u,int v,int w){
edge[++cnt].v=v;
edge[cnt].w=w;
edge[cnt].nex=head[u];
head[u]=cnt;
} void dfs(int u){
if(!head[u]){
dp[u][]=a[u];
num[u]=;
return;
}
for(int i=head[u];i;i=edge[i].nex){
int v=edge[i].v;
dfs(v);
num[u]+=num[v];
}
for(int i=head[u];i;i=edge[i].nex){
int v=edge[i].v;
for(int j=num[u];j>=;--j)
for(int k=;k<=min(j,num[v]);++k)
if(dp[u][j-k]!=ninf&&dp[v][k]!=ninf)
dp[u][j]=max(dp[u][j],dp[u][j-k]+dp[v][k]-edge[i].w);
}
} int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
dp[i][j]=ninf;
for(int i=;i<=n-m;++i){
int k,t1,t2;
scanf("%d",&k);
for(int j=;j<=k;++j){
scanf("%d%d",&t1,&t2);
adde(i,t1,t2);
}
}
for(int i=n-m+;i<=n;++i)
scanf("%d",&a[i]);
dfs();
for(int i=m;i>=;--i)
if(dp[][i]>=){
printf("%d\n",i);
break;
}
return ;
}

最新文章

  1. QT5笔记:关闭应用程序和窗口的函数
  2. AD6电气规则错误报告中英文对照
  3. linux 文件操作命令
  4. Glibc和GCC,ARM-LINUX-GCC的关系
  5. HP DL360 G7通过iLO部署系统
  6. IOS 中openGL使用(使用基准图快速制作滤镜)
  7. OpenCV中的绘图函数-OpenCV步步精深
  8. huginn website agent对提取结果排序
  9. wireshark基础学习—第四部分wireshark过滤器总结
  10. 安装weblogic
  11. CentOS下Redis的安装(转)
  12. 爱奇艺2017秋招笔试(C++智能设备方向)
  13. 不停机修改线上 MySQL 主键字段 以及其带来的问题和总结思考
  14. python系统编程(六)
  15. 支付宝集成遇到&quot;_EVP_DecodeBlock&quot;,referenced from:报错
  16. ipv6地址累加函数
  17. 纯HTML和CSS实现JD轮播图
  18. centos 7.5 安装mysql
  19. 【leetcode 简单】 第七十一题 二叉树的所有路径
  20. php---------字符串转义函数(addslashes,stripslashes)

热门文章

  1. mysql优化之SQL优化
  2. Visual Stdio的使用
  3. 洛谷 P2184 贪婪大陆
  4. HGOI 20191105 题解
  5. 【luogu2668斗地主】模拟
  6. [Linux]虚拟机无法安装deepin15.9的解决方案
  7. Ioc容器与laravel服务容器初探
  8. Namenode服务挂
  9. JS高级_数据类型
  10. tensorflow训练中出现nan