树归~搜城探宝
来源:互联网 发布:mac默认启动系统 编辑:程序博客网 时间:2024/05/06 10:56
[code]#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>using namespace std;struct dd{int left,right,ok;}jie[25];int n,m,f[25][25][3],v[25],a,b,maxn;void dp(int);int main(){memset(f,-0x3f,sizeof(f));scanf("%d%d",&n,&m);for(int i=1;i<n;++i){scanf("%d%d",&a,&b);if(!jie[a].ok) { jie[a].left=b; jie[a].ok=1; }else jie[a].right=b;}for(int i=1;i<=n;++i) scanf("%d",&v[i]);dp(1);//maxn=max(f[1][m][0],f[1][m][1]);printf("%d",maxn);}void dp(int x){//if(!jie[x].left&&!jie[x].right){f[x][1][0]=v[x]; f[x][0][1]=v[x];f[x][0][0]=0; //return;}if(jie[x].left) dp(jie[x].left);else return;if(jie[x].right) dp(jie[x].right);else { for(int i=0;i<=m;++i){ f[x][i][0]=f[jie[x].left][i-1][0]+v[x]; f[x][i][1]=max(f[jie[x].left][i][1],(f[jie[x].left][i-1][1]+v[x],f[jie[x].left][i][0]+v[x])); } return; }for(int i=0;i<=m;++i){int ans1=-0x3fffffff;int ans2=-0x3fffffff;for(int j=0;j<=i;++j){ ans1=max(ans1,f[jie[x].left][j][0]+f[jie[x].right][i-j][0]);if(i-j-1>=0){ans1=max(ans1,f[jie[x].left][j][0]+f[jie[x].right][i-j-1][1]);ans1=max(ans1,f[jie[x].left][j][1]+f[jie[x].right][i-j-1][0]);ans2=max(ans2,f[jie[x].left][j][0]+f[jie[x].right][i-j-1][0]);}}f[x][i][0]=ans2+v[x];f[x][i][1]=max(max(f[jie[x].left][i][1],ans1+v[x]),f[jie[x].right][i][1]);maxn=max(max(maxn,f[x][i][1]),f[x][i][0]);}}[code\]
0 0
- 树归~搜城探宝
- 归
- 归
- 归
- 归
- 利用再归制作树
- [二叉树] 先根遍历归递算法
- Codeforce 487B Strip 动归+二分+线段树
- UVa 1401 Remember the Word (字典树, 动归)
- POJ 2750 Potted Flower (线段树+动归)
- 蓝桥-树-并查集-罪犯归团
- 机器学习实战 第九章回归树错误
- 晨归
- 归家
- 归鱼
- 归零
- 夜归
- 归零
- Mockito for UT of controller
- HDU 1241 Oil Deposits【递归】
- Xcode中的快捷键
- HDU 1892(树状数组二维)
- MJRefresh刷新第三方库
- 树归~搜城探宝
- mycat ERROR 1064 (HY000): ReplaceStatement can't be supported
- Actvity的启动模式相关(转)
- poj3907
- C++面试题
- Socket采用select实现非阻塞功能
- 编译器变量__func__, __FILE__...
- linux中结构体对齐
- Getting MAX_TEXTURE_SIZE from Caches::initConstraints()