URAL 1018 Binary Apple Tree 简单树形背包
来源:互联网 发布:模块数据出现异常 编辑:程序博客网 时间:2024/05/14 09:32
点击打开链接
题意:n个结点的树,每条边都有边权,问保留根节点1和Q条边时,最大的边权和是多少?
保留Q条边 即保留Q+1个点,dp[i][j] 以i为根的子树中选j个的最大价值
dp[i][j]=max(dp[i][j],dp[v][k]+dp[i][j-k])
递推时,dp[i][j-k]为不含子树v,选j-k的最大价值
#include <bits/stdc++.h>using namespace std;typedef pair<int,int> pii;const int N=2e3+20;int n,q,sz[N];vector<pii> e[N];int dp[N][N];//int dfs_size(int u,int fa){sz[u]=1;for(int i=0;i<e[u].size();i++){int v=e[u][i].first;if(v==fa) continue;dfs_size(v,u);sz[u]+=sz[v];}return sz[u];}void dfs(int u,int fa){int v,w;for(int i=0;i<e[u].size();i++){v=e[u][i].first,w=e[u][i].second;if(v==fa) continue;dfs(v,u);for(int j=sz[u];j>1;j--)//{for(int k=1;k<j;k++){//选v则边(u,v)被选 dp[u][j]=max(dp[u][j],dp[v][k]+dp[u][j-k]+w);//dp[u][j-k]为不含子树v,选j-k的最大价值 }} }}int main(){while(cin>>n>>q){memset(sz,0,sizeof(sz));for(int i=1;i<=n;i++)e[i].clear();int u,v,w;for(int i=1;i<=n-1;i++){cin>>u>>v>>w;e[u].push_back(pii(v,w));e[v].push_back(pii(u,w));}dfs_size(1,-1);dfs(1,-1);cout<<dp[1][q+1]<<endl; }return 0;}
0 0
- URAL 1018 Binary Apple Tree 简单树形背包
- URAL 1018 Binary Apple Tree 简单树形背包
- 简单树形动态规划(Ural 1018 Binary Apple Tree)
- Ural 1018 Binary Apple Tree 树形dp
- URAL 1018 Binary Apple Tree (树形DP)
- URAL 1018 Binary Apple Tree (树形DP)
- Ural 1018 Binary Apple Tree [树形dp]
- Ural 1018 Binary Apple Tree (树形DP)
- Ural 1018 Binary Apple Tree(树形dp)
- ural 1018 Binary Apple Tree(树形dp | 经典)
- URAL 1018 Binary Apple Tree(树形dp入门题)
- URAL 1018 Binary Apple Tree(树形dp)
- ural 1018 Binary Apple Tree(树形DP)
- Ural 1018 Binary Apple Tree (树形dp)
- ural 1018 binary apple tree
- ural 1018 Binary Apple Tree
- URAL 1018 Binary Apple Tree
- Ural-1018-Binary Apple Tree
- 编译安装dyninst
- 1013 Digital Roots
- <Ejb3InAction> Sample02 for Weblogic
- hibernate和mybatis的区别!
- 二叉树的创建及各种遍历操作
- URAL 1018 Binary Apple Tree 简单树形背包
- 多表查询
- 关于java多线程2
- webapp之下拉刷新 上拉滚动 JS
- 嵌入式软件开发流程及中断调试方法
- 【北邮OJ】95. 二进制数
- 另类乘法
- Excel导入 转model
- CSDN转载博客