hiho#1055 : 刷油漆
来源:互联网 发布:淘宝大学的课程有用吗 编辑:程序博客网 时间:2024/04/28 23:29
hiho#1055 : 刷油漆
树形dp的基础题。
注意理解成 分成很多个背包。
一个可以涂m个点的背包,可以拆分成可以涂m1,m2,m3….的背包
#include<cstdio>#include<algorithm>#include<vector>#include<cstring>using namespace std;const int N=300;int n,m;int v[N];vector<int >ve[N];int dp[N][N];//dp[i][j]以i为根节点,涂j个块int vis[N];void dfs(int now){ vis[now]=1; // printf("size:%d\n",ve[now].size()); for(int i=0;i<ve[now].size();i++) { int to=ve[now][i]; // printf("now:%d to:%d\n",now,to); if(vis[to]) continue; dfs(to); for(int j=m;j>=2;j--) { for(int k=1;k<j;k++) { dp[now][j]=max(dp[now][j],dp[now][j-k]+dp[to][k]); } } } return ;}int main(){ while(scanf("%d%d",&n,&m)!=EOF) { for(int i=1;i<=n;i++) { scanf("%d",&v[i]); } for(int i=0;i<=n;i++) ve[i].clear(); for(int i=0;i<n-1;i++) { int a,b; scanf("%d%d",&a,&b); ve[a].push_back(b); ve[b].push_back(a); } memset(dp,0,sizeof dp); memset(vis,0,sizeof vis); for(int i=1;i<=n;i++) dp[i][1]=v[i]; dfs(1); printf("%d\n",dp[1][m]); } return 0;}
0 0
- hiho#1055 : 刷油漆
- HIHO #1055 : 刷油漆(树形dp 入门)
- hiho刷题日记——第十二天刷油漆
- hihoCoder 1055 刷油漆
- #1055 : 刷油漆
- hihocoder:#1055 : 刷油漆
- hihocoder#1055之刷油漆
- 刷油漆
- hihocoder 1055 刷油漆(树形DP+背包)
- hihocoder 1055 刷油漆(树形dp)
- hihocoder-1055 刷油漆(树形DP)
- hihocoder #1055 : 刷油漆(树形dp)
- hihocoder 1055 刷油漆 (树型dp)
- hihocoder 1055 : 刷油漆(树状dp)
- 格子刷油漆
- 蓝桥杯 格子刷油漆
- 蓝桥杯 格子刷油漆
- 格子刷油漆
- LeetCode-House Robber
- Charles-网络封包分析工具
- 2.C++:c++引用与指针的区别(转载)
- python第九天学习记录
- 编译Android-X86 - 后半部分输出
- hiho#1055 : 刷油漆
- SQL 数据库 学习 002 如何启动 SQL Server 软件
- 九度1078
- hiho#1050 : 树中的最长路
- UVA 11424 UVA 11424 GCD - Extreme (I) (欧拉函数)
- 广播接收者BroadcastReceiver
- tcpdump抓包命令详解
- 面试中 数据读入的几种常用方式
- 渗透攻防Web篇-SQL注入攻击初级