hdu 1561 树形dp+背包+dfs
来源:互联网 发布:mac ssh sftp 客户端 编辑:程序博客网 时间:2024/06/05 19:51
这道题考的是树形dp+dfs+背包。
<0/1分组背包模型:http://blog.csdn.net/y91041/article/details/14224095>
下面是我的代码:
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;int size;int f[252][250];int n,m;int a[250];struct node{int to,next;};node e[62505];int head[250];bool visit[252];void dp(int v){visit[v]=true; for(int i=head[v];i;i=e[i].next) //存储的是有向边 { if(!visit[e[i].to]) { dp(e[i].to); } for (int j=m;j>=2;j--) for (int k=1;k<j;k++) if(f[e[i].to][j-k]!=-1&&f[v][k]!=-1) f[v][j] = max( f[v][j] , f[e[i].to][j-k]+f[v][k] ); }}void tjb(int x,int y){size++;e[size].next=head[x];head[x]=size;e[size].to=y;}int main(){cin>>n>>m;while(n!=0||m!=0){size=0;memset(a,0,sizeof(a));memset(head,0,sizeof(head));for(int i=1;i<=n;i++){int x;cin>>x>>a[i];tjb(x,i);}memset(f,-1,sizeof(f));memset(visit,0,sizeof(visit)); for (int j=n;j>=0;j--) f[j][0]=0,f[j][1]=a[j]; m++;dp(0);cout<<f[0][m]<<endl;cin>>n>>m;}return 0;}除开这种做法,还有一种与选课相似的做法,转二叉树+背包。
<推荐:http://blog.csdn.net/whyorwhnt/article/details/9491575>
- hdu 1561 树形dp+背包+dfs
- HDU 1561 树形dp+背包
- hdu 1561树形dp+分组背包
- hdu 1561 (树形dp+依赖背包)
- HDU 3848 DFS 树形DP
- hdu 1011 树形dp 背包
- hdu 4276 树形dp背包
- HDU 4276 树形dp + 背包
- HDU 4003 树形DP+背包
- hdu 1561(树形dp)(背包dp)
- 树形dp ( vector dfs 01背包 ) hdu 1011 Starship Troopers
- hdu 1561 The more, The Better 树形DP+背包
- HDU 1561 树形DP+有依赖的背包
- hdu 1561 The more, The Better (树形背包dp)
- HDU 1561 The more, The Better 依赖背包+树形DP
- hdu 1561 The more, The Better 树形dp+背包
- HDU 1561 The more, The Better (树形DP + 01背包)
- hdu 1561 The more, The Better (树形dp+背包)
- java学习脚印:I/O 流概观(OverView)
- 如何降低白噪声对网站用户体验的影响?
- PHP学习#YII时间控件
- ExtJS 轻松实现前端列定制
- Spring的切入点(2 gePointcut)
- hdu 1561 树形dp+背包+dfs
- RemoteView ViewFlipper 小部件简单动画
- content = "IE=edge,chrome=1" 详解
- extjs Cannot read property 'dom' of null
- 如果是初学C语言请看完 一些成功人士的心得
- Linux下C语言编程基础(Makefile)
- QT绘图系统(The Paint System)
- Objective-C的self.用法的一些总结
- iOS中定时器NSTimer的使用