- 1、本文档共40页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
树形DP
第 PAGE 页 Auther: 陈江勇
2008年10月22日
树形DP
二叉苹果树(ural 1108)
题目意思:
有一棵苹果树,苹果树的是一棵二叉树,共N个节点,树节点编号为1~N,编号为1的节点为树根,边可理解为树的分枝,每个分支都长着若干个苹果,现在要要求减去若干个分支,保留M个分支,要求这M个分支的苹果数量最多。
输入:
N M
接下来的N-1行是树的边,和该边的苹果数N and M (1 ≤ M N; 1 N ≤ 100)
输出:
剩余苹果的最大数量。
input
5 2
1 3 1
1 4 10
2 3 20
3 5 20
output
21
算法:
删除了某个分支,那么这个分支下的子分支也同时删除。
保留M个分支,也就是删除N-M-1个分支。剩余的最多苹果数=总苹果数-剪掉的苹果数。
注意本题给的边并没有按照树根--树叶的形式来给,也没有按照树的顺序给出边。本来想一个节点对应一个分支长着的苹果数量,cost[v]就表示v这个节点的苹果数,可以这样做,但是在输入的时候,不知道这个苹果数量是那个节点的,因为不知道哪个是哪个的子结点。所以用了无向图和苹果数加到边上去。
我的解法中:这题的树状DP的整体思想个pku3345是一样的。
有一些不一样的地方要注意一下:
本程序其实不仅仅针对二叉树,可以是任意的树,删除任意个分支都有算。
#includeiostream
#includevector
#includelimits
using namespace std;
#define MN 110
int f[2*MN],p[MN],tmp[MN];
int N,M;
bool visit[MN];
struct NODE
{
int val;
int cost;
};
vectorNODEG[MN];
inline int max(int a,int b)
{
return ab?a:b;
}
inline int min(int a,int b)
{
return ab?a:b;
}
void my_clear()
{
int i;
for(i=0;i=N;i++)
{
G[i].clear();
}
memset(visit,false,sizeof(visit));
}
int DP(int v,int from)
{
visit[v]=true;
int i,j,k,s,w,last,now;
s=G[v].size();
if(s==1) //这边不再是s==0
{
p[0]=0;
return 1;
}
last=0;
f[from]=0;
for(i=0;is;i++)
{
w=G[v][i].val;
if(visit[w]==true)
continue;
now=DP(w,from+last+1);
p[now]=p[now-1]+G[v][i].cost; //这边不要漏,把节点w也给删除
for(j=0;j=last+now;j++)
tmp[j]=INT_MAX;
for(j=0;j=last;j++)
{
for(k=0;k=now;k++)
{
tmp[j+k]=min(tmp[j+k],f[from+j]+p[k]);
}
}
last+=now;
for(j=0;j=last;j++)
{
f[from+j]=tmp[j];
}
}
for(i=0;i=last;i++)
p[i]=f[i+from];
last++; //加上自身节点
return last;
}
int main()
{
int i,a,b,sum,c;
NODE tmp;
while(scanf(%d%d,N,M)!=EOF)
{
sum=0;
my_clear();
for(i=1;iN;i++)
{
scanf(%d%d%d,a,b,c);
tmp.cost=c;
tmp.val=b;
G[a].push_back(tmp);
tmp.val=a;
G[b].push_back(tmp);
sum+=c;
}
DP(1,0);
printf(%d\n,sum-f[N-M-1]);
}
return 0;
}
有限电视网络(pku1155 TELE)
题目描述:
有一个电视台要用电视网络转播节目。这种电视网络是一树,树的节点为中转站或者用户。树节点的编号为1~N,其中1为总站,2~(N-M)为中转站,(总站和中转站统称为转发站)N-M+1~N为用户
您可能关注的文档
- 新苏教版(2020版)四年级上册科学全册教案.pdf
- 教师暑假政治理论学习心得体会(精选3篇).doc
- 6.9-波浪的浅水变形:波浪的绕射和反射.pdf
- 网络操作系统管理 实习报告.doc
- 保险营销实习报告 刘云.doc
- 产品报价单模板.docx
- 桥梁保护区管理制度.doc
- 材料和化学的关系.doc
- 初一鼠妇实验报告模板.doc
- 沃尔玛企业调查报告.doc
- 2024年黑电行业成熟市场分析报告:均价提升或为市场规模扩张主要动力,看好TCL等中国品牌发展前景.pdf
- 2023年荣旗科技分析报告:工业AI质检设备领先企业,消费电子&新能源双赛道多点开花.pdf
- 2024年五芳斋分析报告:百年传承老字号,发力粽+业务打造新增长曲线,粽子龙头焕新升级再出发.pdf
- 2024年传媒行业分析报告:坚定文化出海,把握全球机遇.pdf
- 2024年三友医疗分析报告:集采扰动出清,创新引领增长.pdf
- 文稿竞争性磋商gxzc2017h.pdf
- 应用程序访问管理器aamcau-16 ops.pptx
- 石油课件油层物理.pdf
- 问询2017-2018函三花智控深交所.pdf
- 化工行业关键知识-07化纤氨纶制造.pdf
文档评论(0)