poj 1155 TELE
题目描述:...
解法:
树形dp+分组背包。
dp[i][j]记录以i为根的子树分配j个用户时的最大收益,cnt[i]记录以i为根的子树有几个叶子节点,对于每个i,背包容量即为cnt[i]的大小。
将i的每个子节点看作一组,这组背包的物品重量即为1~cnt[son[i]],由于只能从每组中选出一种物品,所以可以看做分组背包。
1 #include<iostream> 2 #include<cstring> 3 #include<algorithm> 4 #include<vector> 5 #define N 3010 6 using namespace std; 7 const int inf=(1<<30); 8 struct Edge{ 9 int next,len; 10 }; 11 vector<Edge>V[N]; 12 int dp[N][N]; 13 int cnt[N]; 14 void init(){ 15 for(int i=1;i<N;i++)V[i].clear(); 16 for(int i=0;i<N;i++) 17 for(int j=0;j<N;j++) 18 dp[i][j]=-inf; 19 for(int i=0;i<N;i++) 20 dp[i][0]=0; 21 memset(cnt,0,sizeof(cnt)); 22 } 23 int dfs(int n){ 24 if(cnt[n]!=0)return cnt[n]; 25 cnt[n]=0; 26 for(int i=0;i<V[n].size();i++){ 27 dfs(V[n][i].next); 28 cnt[n]+=cnt[V[n][i].next]; 29 } 30 return cnt[n]; 31 } 32 void DP(int n){ 33 if(V[n].size()==0) 34 return ; 35 for(int i=0;i<V[n].size();i++){ 36 DP(V[n][i].next); 37 for(int k=cnt[n];k>=1;k--) 38 for(int j=1;j<=cnt[V[n][i].next];j++) 39 if(k>=j) 40 dp[n][k]=max(dp[n][k],dp[n][k-j]+dp[V[n][i].next][j]+V[n][i].len); 41 42 } 43 } 44 int main(){ 45 int n,m; 46 while(cin>>n>>m){ 47 init(); 48 for(int i=1;i<=n-m;i++){ 49 int k,a,c; 50 cin>>k; 51 while(k--){ 52 cin>>a>>c; 53 Edge E; 54 E.next=a;E.len=-c; 55 V[i].push_back(E); 56 } 57 } 58 for(int i=n-m+1,j=1;i<=n;i++,j++){ 59 int c; 60 cin>>c; 61 dp[i][1]=c; 62 cnt[i]=1; 63 } 64 dfs(1); 65 DP(1); 66 for(int i=cnt[1];i>=1;i--) 67 if(dp[1][i]>=0){ 68 cout<<i<<endl; 69 break; 70 } 71 } 72 return 0; 73 }
转载于:https://www.cnblogs.com/silver-bullet/archive/2012/10/29/2745400.html
poj 1155 TELE相关推荐
- POJ 1155 TELE 背包型树形DP 经典题
由电视台,中转站,和用户的电视组成的体系刚好是一棵树 n个节点,编号分别为1~n,1是电视台中心,2~n-m是中转站,n-m+1~n是用户,1为root 现在节点1准备转播一场比赛,已知从一个节点传送 ...
- POJ 1155 TELE【树形DP】
POJ 1155 TELE http://poj.org/problem?id=1155 大意:某电台要广播一场比赛,该电台网络是由N个网点组成的一棵树,其中M个点为客户端, 其余点为转发站.客户端i ...
- DP Intro - Tree DP Examples
因为上次比赛sb地把一道树形dp当费用流做了,受了点刺激,用一天时间稍微搞一下树形DP,今后再好好搞一下) 基于背包原理的树形DP poj 1947 Rebuilding Roads 题意:给你一棵树 ...
- POJ前面的题目算法思路【转】
1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...
- POJ 超详细分类
POJ 各题算法 1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 ...
- 树形DP --算法竞赛专题解析(17)
本系列文章将于2021年整理出版,书名<算法竞赛专题解析>. 前驱教材:<算法竞赛入门到进阶> 清华大学出版社 网购:京东 当当 想要一本作者签名书?点我 如有建议, ...
- hdu与poj题目分类
POJ 初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. (5)构造法.(po ...
- POJ 3268 D-Silver Cow Party
http://poj.org/problem?id=3268 Description One cow from each of N farms (1 ≤ N ≤ 1000) conveniently ...
- poj 2559 Largest Rectangle in a Histogram 栈
// poj 2559 Largest Rectangle in a Histogram 栈 // // n个矩形排在一块,不同的高度,让你求最大的矩形的面积(矩形紧挨在一起) // // 这道题用的 ...
最新文章
- ROS kinetic安装、Kinect2驱动安装和配置
- React 数字取整
- 这些常识一直在损害健康
- 相机位姿估计2:[应用]实时位姿估计与三维重建相机姿态
- Android Studio报Element XXXX must be declared的解决方法
- oracle误删数据的解决方法
- 装了卡巴后VS 2003不能启动调试错误的解决方案
- Python基础入门_5面向对象基础
- JavaScript之常用方法讲解
- asp.net 使用Master模板页需要注意
- G盘文件系统RAW要怎么办啊
- Beta阶段第四次Scrum Meeting
- 使用wePE安装系统
- ADAMS并联机器人动力学仿真【附源文件】
- matlab编写正弦波mif,使用MATLAB一键制作mif文件
- excel单元格的引用
- deb文件如何安装(安装文件管理器)
- IIS如何添加MIME类型.svg/.woff2/.woff
- Photoshop CS2 视频教程-PS合并图层(转)
- 【毕设记录日记】深度学习|铝型材表面缺陷视觉检测算法:YOLOv5环境搭建、基础知识、问题解决、优化方法
热门文章
- mac的python怎么输入中文_无法在python IDE(Mac OS X)中输入unicode
- 《计算机应用基础实训教程》,《计算机应用基础实训教程》修改稿(文).doc
- 连接linux系统的mysql,Linux系统MySQL开启远程连接
- flask对mysql数据库增删改查_flask后台框架1.4(mysql配置+数据库增删改查)-Go语言中文社区...
- java exe 路径_Java程序获取执行自己的java.exe路径
- php 图片叠加,thinkPHP5 生成海报(图片叠加定位)
- java io流屏幕输出_java IO流 之 输出流 OutputString()的使用
- 等离子显示器测试软件,等离子电视各种屏自检方法分享
- linux块设备驱动编写,Linux内核学习笔记 -49 工程实践-编写块设备驱动的基础
- php 获取子类的方法名,php获取分类下的所有子类方法