【dp】URAL-1018
这个题目听说是DP tree
DP tree自己还不是很熟悉,看了网上的解题报告出的题目,
有点戳,不解释,今后多看看这个方面的问题。
ans[i][j] = max(ans[i.leftchild][k] + ans[i.rightchild][j-k-1]) + i.val (i.leftchild表示其左孩子的编号,i.val表示i与其父节点相连的那条边上的苹果数),这样对于第i个节点ans[i][j]就会必取i与其父节点相连的那条边最终形成j条边。当j=0时,ans[i][j] = 0。
#include "stdio.h"
#include "string.h"
struct node
{
int l , r;
int s;
} tree[200];
int f[110][110] , apple[110][110];
int vis[100];
int n , q;
void create_tree(int root)
{
int i;
vis[root] = 1;
for( i = 1 ; i <= n ; i++ )
if(!vis[i] && apple[root][i] != -1)
{
if(tree[root].l==0)
tree[root].l=i;
else
tree[root].r=i;
tree[i].s = apple[root][i];
create_tree(i);
}
}
int tree_dp(int t , int k)
{
int i , ls , rs;
if(f[t][k] != -1)
return f[t][k];
if(t==0||k==0)
{
f[t][k] = 0;
return 0;
}
f[t][k] = 0;
for( i = 0 ; i <= k-1 ; i++ )
{
ls = tree_dp(tree[t].l,i);
rs = tree_dp(tree[t].r,k-1-i);
if( f[t][k] < ls+rs )
f[t][k] = ls+rs;
}
f[t][k] += tree[t].s;
return f[t][k];
}
int main()
{
int i , ans , a , b , s;
scanf("%d%d",&n,&q); q++;
memset(apple,-1,sizeof(apple));
for ( i = 1 ; i <= n-1 ; i++)
{
scanf("%d%d%d",&a,&b,&s);
apple[a][b]=s; apple[b][a]=s;
}
memset(tree,0,sizeof(tree));
memset(vis,0,sizeof(vis));
create_tree(1);
memset(f,-1,sizeof(f));
ans = tree_dp(1,q);
printf("%d\n",ans);
return 0;
}
转载于:https://www.cnblogs.com/zuckerTT/archive/2011/09/25/2189855.html
【dp】URAL-1018相关推荐
- 【BZOJ1814】Ural 1519 Formula 1 插头DP
[BZOJ1814]Ural 1519 Formula 1 题意:一个 m * n 的棋盘,有的格子存在障碍,求经过所有非障碍格子的哈密顿回路个数.(n,m<=12) 题解:插头DP板子题,刷板 ...
- 【DP】【期望】$P1850$换教室
[DP][期望]\(P1850\)换教室 链接 题目描述 有 \(2n\) 节课程安排在$ n$ 个时间段上.在第 \(i\)(\(1 \leq i \leq n\))个时间段上,两节内容相同的课程同 ...
- Bailian2760 数字三角形【DP】
2760:数字三角形 描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (图1) 图1给出了一个数字三角形.从三角形的顶部到底部有很多条不同的路径.对于每条路径,把路径上面的数加起来可 ...
- NUC1131 Triangle【DP】
Triangle 时间限制: 1000ms 内存限制: 65536KB 通过次数: 1总提交次数: 1 问题描述 图1表示一个数字三角形. 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 ...
- LeetCode:完全平方数【279】【DP】
LeetCode:完全平方数[279][DP] 题目描述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少. 示 ...
- 【DP】序列 题解
[DP]序列 题解 序列 题目 一个长度为kkk的整数序列bbb 1,bbb 2,-,bkbkbk(1≤bbb 1≤bbb 2≤-≤bkbkbk≤NNN)称为"好序列"当且仅当后一 ...
- poj 2411 Mondriaan#39;s Dream 【dp】
题目:poj 2411 Mondriaan's Dream 题意:给出一个n*m的矩阵,让你用1*2的矩阵铺满,然后问你最多由多少种不同的方案. 分析:这是一个比較经典的题目.网上各种牛B写法一大堆. ...
- BestCoder冠军赛 - 1005 Game 【DP】
[题意] 给出一个set,set中有几个数. 现在给出n个人,环成一圈搞约瑟夫... 开始时从第1号报数,每次从set中随机选出一个数s,等报数到s后,报s的人出圈,其他人继续报数. 最后只剩1人时, ...
- 【9.22校内测试】【可持久化并查集(主席树实现)】【DP】【点双联通分量/割点】...
1 build 1.1 Description 从前有一个王国,里面有n 座城市,一开始两两不连通.现在国王将进行m 次命令,命令可 能有两种,一种是在u 和v 之间修建道路,另一种是询问在第u 次命 ...
- zzuliOJ 1894: 985的方格难题 【dp】
1894: 985的方格难题 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 369 Solved: 75 Description 985走入了一个n ...
最新文章
- 操作-《oracle入门到精通》第六章开始
- spring3.0设置定时任务
- mysql 4.0 删除重复_mysql删除重复数据
- SAP系统中的银行主数据FI12
- 如何在 Flutter 中使 Expanded 中的文本可滚动
- java数据抽取到数据仓库_关于数据增量抽取的模拟实现——脚本实现
- C++ Templates 中的一个例子
- excel 表生成insert语句。
- Openstack平台搭建之第二天
- 残疾人软件开发_组织如何使残疾人更具包容性
- ROS笔记(26) Movelt!
- 计算机网络可以分为点对点网络,计算机网络第1章习题答案
- Linux 端口占用情况查看
- mysql 分页 order_mysql学习笔记:九.排序和分页(order by、limit)
- Golang 大杀器之性能剖析 PProf
- Cefsharp入坑实操
- 了解单反相机的自动对焦点
- NLP之文本分类方法之基础知识
- ubuntu 20.04网卡驱动安装(rtl8812au)
- collapsible data-collapsed Jquery-mobile动态设置
热门文章
- ospf lesson 3
- Android常见漏洞
- Python基本语法[二],python入门到精通[四] (转)
- java数组、集合和数据结构知识*
- Eclipse导入Android Project遇到的问题
- [zz]写在KVM (Kernel-based Virtual Machine) 安装成功后
- 一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-使用UDA操纵SQL语句...
- 错误913:未能找到ID为13的数据库。可能该数据库尚未激活,也可能正在转换过程中...
- Java 并发(JUC 包-03)
- 树莓派 树莓派 编c++_树莓派6年