poj 2486 树形dp

思路:这题是裸的树形dp。dp[i][j]表示第i个节点花费j步并且从子节点返回,能得到的最大苹果数;nback[i[j]表示第i个节点花费j步并且进入某个子节点不返回,能得到的最大苹果数。那么我们就能得到动态方程:

根节点为u,子节点为v

dp[u][j]=max(dp[u][j],dp[u][j-k-2]+dp[v][k]);
nback[u][j]=Max(nback[u][j],nback[u][j-k-2]+dp[v][k],dp[u][j-k-1]+nback[v][k]);//表示对某个节点可以选择进入返回或不返回.

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
#define Maxn 210
using namespace std;
int vi[Maxn],val[Maxn],dp[Maxn][Maxn],n,m,nback[Maxn][Maxn];
vector<int> head[Maxn];
void init()
{memset(vi,0,sizeof(vi));memset(val,0,sizeof(val));memset(dp,0,sizeof(dp));memset(nback,0,sizeof(nback));for(int i=0;i<=110;i++)head[i].clear();
}
inline int Max(int a,int b,int c)
{int temp=a>b?a:b;return temp>c?temp:c;
}
void add(int u,int v)
{head[u].push_back(v);head[v].push_back(u);
}
void dfs(int u)
{int i,v,sz,j,k;vi[u]=1;sz=head[u].size();int s1,s2;s1=s2=0;for(i=0;i<sz;i++){v=head[u][i];if(vi[v]) continue;dfs(v);for(j=m;j>=1;j--){s1=s2=0;for(k=0;k<=j-1;k++){if(j-k>=2)s1=max(s1,dp[u][j-k-2]+dp[v][k]);s2=Max(s2,nback[u][j-k-2]+dp[v][k],dp[u][j-k-1]+nback[v][k]);}dp[u][j]=max(dp[u][j],s1);nback[u][j]=max(nback[u][j],s2);}}for(i=0;i<=m;i++)dp[u][i]+=val[u];for(i=0;i<=m;i++)nback[u][i]+=val[u];
}
int main()
{int i,j,a,b;while(scanf("%d%d",&n,&m)!=EOF){init();for(i=1;i<=n;i++)scanf("%d",val+i);for(i=1;i<n;i++){scanf("%d%d",&a,&b);add(a,b);}dfs(1);printf("%d\n",nback[1][m]);}return 0;
}

 

转载于:https://www.cnblogs.com/wangfang20/p/3252450.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/408562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI研发工程师成长指南

AI研发工程师成长指南本文为数据茶水间群友原创&#xff0c;经授权在本公众号发表。关于作者&#xff1a;Japson。某人工智能公司AI平台研发工程师&#xff0c;专注于AI工程化及场景落地。持续学习中&#xff0c;期望与大家多多交流技术以及职业规划。0x00 前言首先&#xff0c…

用cocos2dx实现模态对话框

ui部分使用了cocoStudio&#xff0c;注意这里没有实现怎么屏蔽其他的输入事件&#xff0c;其他的文档已经太多了&#xff0c;我这里使用的cocoStudio的控件自己的特性。 这里强烈推荐一下cocoStudio&#xff0c;虽然现在还有不完善的地方&#xff0c;但是我个人感觉做的很不错了…

进程和线程(上)

点击上方“算法猿的成长”&#xff0c;选择“加为星标”第一时间关注 AI 和 Python 知识2019 年第 70 篇文章&#xff0c;总第 94 篇文章本文大约 6000 字&#xff0c;阅读大约需要 15 分钟最近会开始继续 Python 的进阶系列文章&#xff0c;这是该系列的第一篇文章&#xff0c…

ZOJ 1057 Undercut(简单模拟)

Undercut 题目链接&#xff1a;http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId57 题目大意&#xff1a;a card game,two player,每个player有n张牌&#xff0c;按顺序出牌&#xff0c;如果2张牌的点数相等&#xff0c;2个player都不得分&#xff1b;如果2张牌点…

你有哪些deep learning(rnn、cnn)调参的经验?

点击上方“算法猿的成长”&#xff0c;选择“加为星标”第一时间关注 AI 和 Python 知识来源&#xff1a;知乎问题深度学习中调参其实是一个比较重要的技巧&#xff0c;但很多时候都需要多尝试多积累经验&#xff0c;因此算法工程师也被调侃为调参工程师。这里分享来自知乎上的…

A+B for Matrices 及 C++ transform的用法

题目大意&#xff1a;给定两个矩阵&#xff0c;矩阵的最大大小是M*N&#xff08;小于等于10&#xff09;&#xff0c;矩阵元素的值的绝对值小于等于100&#xff0c;求矩阵相加后全0的行以及列数。 1 #include<iostream>2 using namespace std;3 #define N 104 5 int main…

进程和线程(下)

点击上方“算法猿的成长”&#xff0c;选择“加为星标”第一时间关注 AI 和 Python 知识2019 年第 71 篇文章&#xff0c;总第 95 篇文章本文大约 8000 字&#xff0c;建议收藏阅读上一篇文章介绍了进程和线程的基本概念&#xff0c;以及多进程如何实现&#xff0c;本文则介绍下…

SPOJ MYQ10 (数位DP)

题意 询问区间[a,b]中的Mirror Number的个数&#xff0c;其中Mirror Number是指把它横着翻转后还能表示同样的数字。 思路 注意这个可不是回文数。。除了0,1,8&#xff0c;别的数字翻转过后就不是数字了。所以策略就是记忆化按位搜索&#xff0c;每位只搜0,1,8&#xff0c;最后…

8月总结抽奖

1首先是小小总结下 8 月发文的情况&#xff0c;总共推文时间是 21 天&#xff0c;原创文章有 9 篇&#xff0c;分别如下&#xff1a;Jupyter 进阶教程PyTorch 系列 | 数据加载和预处理教程PyTorch系列 | 如何加快你的模型训练速度呢&#xff1f;Leetcode 系列 | 反转链表PyTorc…

【文件系统】浅解释FAT32

了解完linux下的文件系统之后&#xff0c;顺便对FAT32也研究一下。 假如一个FAT32表如下所示。 文件的簇应该保留在目录中&#xff0c;根据此簇&#xff0c;应该能得到一个块。 要找到文件的下一块&#xff0c;就要根据簇在FAT中寻找&#xff0c;所以FAT中存储的不是本簇的簇号…

全网首发!2020年AI、CV、NLP顶会最全时间表!

点上方蓝字计算机视觉联盟获取更多干货在右上方 设为星标 ★&#xff0c;与你不见不散编辑&#xff1a;Sophia计算机视觉联盟 原创总结 | 公众号 CVLianMeng联盟花费一周对2020年顶会时间进行了总结&#xff01;2020 AI、CV、NLP顶会时间表&#xff0c;包含会议举办的时间、…

putty自动登录设置

1.用PuTTY SSH 密钥生成工具puttygen.exe生成密钥. 生成的密钥类型使用默认的SSH-2 RSA&#xff0c;位长度改为1024位 点击“生成”按钮&#xff0c;然后再在空白区域移动鼠标,以便产生随机数据&#xff0c;直至生成完密钥数据。 点击保存私钥(可以不设置密码保护). 2.SSH密码方…

互联网大佬学历背景大揭秘,看看是你的老乡还是校友

作者&#xff1a;徐麟&#xff0c;某互联网公司数据分析狮&#xff0c;个人公众号数据森麟&#xff08;id&#xff1a;shujusenlin&#xff09;前言 互联网作为一个快速发展的新兴领域&#xff0c;聚集了大量的优秀人才&#xff0c;前沿技术的广泛应用也不断地为互联网注入着新…