POJ1155-树形DP&&背包
来源:互联网 发布:linux 端口转发到外部 编辑:程序博客网 时间:2024/06/06 03:54
技巧:num数组,用来记录在此树上最多选择多少个。其他就是背包了
#include <cstdlib>#include <cstdio>#include <iostream>#include <cstring>using namespace std;const int maxn=3002;int m,n;int len;int dp[maxn][maxn],tem[maxn],a[maxn][maxn],head[maxn],num[maxn];struct node{ int now; int val; int next;}tree[9005];void add(int a,int b,int c){ tree[len].now=a; tree[len].val=b; tree[len].next=head[c];//建立一个树,链式前进星, head[c]=len++;}int dfs(int root){ int p; for(int i=head[root];i!=-1;i=tree[i].next) { p=tree[i].now; dfs(p); for(int l=0;l<=num[root];l++) tem[l]=dp[root][l]; for(int k=0;k<=num[root];k++) for(int j=1;j<=num[p];j++) { dp[root][k+j]=max(dp[root][j+k],dp[p][j]+tem[k]-tree[i].val); } num[root]+=num[p]; } return 0;}int main(){int a,b;int k; while(~scanf("%d%d",&n,&m)) { len=0; memset(head,-1,sizeof(head)); for(int i=1;i<=n-m;i++) { scanf("%d",&k); num[i]=0; for(int c=0;c<k;c++) {scanf("%d%d",&a,&b); add(a,b,i);} } for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) dp[i][j]=-9999999; for(int i=n-m+1;i<=n;i++) {scanf("%d",&dp[i][1]); num[i]=1;} dfs(1); //for(int i=1;i<=n-m;i++) // printf("%d ",head[i]); //printf("^^^^\n"); for(int i=m;i>=0;i--) { //printf("%d ",dp[i][1]); if(dp[1][i]>=0) {printf("%d\n",i);break;} } } return 0;}
阅读全文
0 0
- poj1155树形dp+背包
- POJ1155-树形DP&&背包
- POJ1155 TELE【树形dp(背包)】
- POJ1155---TELE(树形dp,背包)
- poj1155 TELE(树形dp+背包)
- poj1155 TELE(树形+背包dp)
- [poj1155] TELE 树形DP 01背包
- 树形DP+背包(poj1155泛化分组背包)
- poj1155 (树形dp)
- POJ1155:TELE(树形DP)
- poj1155之树形DP
- poj1155(树形dp)
- poj1155(树形dp)
- poj1155 TELE 【树形dp】
- 树形DP poj1155
- poj1155 TELE(树形dp)
- poj1155 poj2468 树形DP专题。
- POJ1155 TELE(树形DP)
- 我大声地告诉您,一卡通的终极目标就是无卡通
- 《权限系列shiro+cas》----配置各个应用程序
- POJ 2104 . K-th Number
- 使用导航控件
- hadoop 2.2.X 配置参数说明:mapred-site.xml
- POJ1155-树形DP&&背包
- 【转】JVM调优总结(二)-一些概念
- Apache Kylin的入门安装
- 初学Python之Flask开发API接口
- 用户注册和登录实例
- 装饰者模式
- Ubuntu16.04下安装Anaconda,tensorflow以及解决spyder中无法import tensorflow问题
- python基础1
- Codeforces Round #420 (Div. 2) E. Okabe and El Psy Kongroo(矩阵快速幂)