hdu1561,树形dp+背包
来源:互联网 发布:python前景 知乎 编辑:程序博客网 时间:2024/05/06 23:26
有n个城堡,要攻打m个城堡获取财富,但是有些城堡不能直接攻打,要求先攻打某个其他城堡才能攻打这个城堡。
这道题算是一个有依赖关系的背包问题。
基本上是自己的思路,好高兴。
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#define INF 200000000int n,m,dp[205][205],first[205],next[405],v[205],f[205][205];struct edge{ int u; int v;}en[405];int max(int a,int b){ return a>b?a:b;}void add(int a,int b,int p){ en[p].u=a; en[p].v=b; next[p]=first[a]; first[a]=p;}void getdp(int s,int fu){ int i,j,k,l; for(i=first[s];i!=-1;i=next[i]) { if(en[i].v!=fu) { getdp(en[i].v,s); } } for(i=0;i<=n;i++) for(j=0;j<=m;j++) f[i][j]=-INF; f[0][0]=0; for(i=first[s],l=0;i!=-1;i=next[i]) { if(en[i].v!=fu) { l++; for(j=0;j<=m;j++) { if(dp[en[i].v][j]!=-1) { for(k=m;k>=j;k--) { if(f[l-1][k-j]!=-INF) { f[l][k]=max(f[l][k],f[l-1][k-j]+dp[en[i].v][j]); } } } } } } for(i=0;i<=m;i++) { for(j=0;j<=l;j++) { dp[s][i]=max(dp[s][i],f[j][i]); } } dp[s][0]=0; if(s!=0) { for(i=m;i>=1;i--) if(dp[s][i-1]!=-1) dp[s][i]=dp[s][i-1]+v[s]; } else { for(i=m;i>=1;i--) if(dp[s][i-1]!=-1) dp[s][i]=max(dp[s][i],dp[s][i-1]+v[s]); }}int main(){ int i,j,k,l,idx,a; while(scanf("%d%d",&n,&m)!=EOF) { if(n==0&&m==0) break; for(i=0;i<=n;i++) first[i]=-1; for(i=0;i<=n*2;i++) next[i]=-1; for(i=0;i<=n;i++) for(j=0;j<=m;j++) dp[i][j]=-1; /*memset(first,-1,sizeof(first)); memset(next,-1,sizeof(next)); memset(dp,-1,sizeof(dp));*/ idx=0; for(i=1;i<=n;i++) { scanf("%d%d",&a,&v[i]); idx++; add(a,i,idx); } v[0]=0; getdp(0,-1); printf("%d\n",dp[0][m]); } return 0;}
0 0
- hdu1561 树形DP+背包
- hdu1561 树形dp 背包
- hdu1561,树形dp+背包
- hdu1561树形dp 01背包
- hdu1561(树形DP+背包问题)
- hdu1561树形dp+依赖背包
- HDU1561 树形dp,泛化背包
- hdu1561有依赖的背包-树形dp
- (树形dp 依赖背包)hdu1561
- hdu1561树形背包
- hdu1561 (树形DP_01背包)
- hdu1561 树形背包初探
- HDU1561:The more, The Better(树形DP+01背包)
- HDU1561 The more,The Better(树形DP+背包)
- hdu1561(树形dp+01背包) The more, The Better
- HDU1561:The more, The Better(树形dp & 01背包)
- hdu1561树形DP入门
- hdu1561之树形dp
- ThinkPHP3.2.1代码示例-仅供PHP新手入门
- JavaSE0002_Java编程语言运行机制
- 第三周作业
- php操作mysql(封装mysql类)
- Can't create handler inside thread that has not called Looper.prepare()
- hdu1561,树形dp+背包
- int
- 【DP】Palindrome Partitioning II
- ASP.NET-008—JS绑定控件事件
- (重要)JSVM中配置文件介绍以及如何配出各种可分级
- 常用的webservice接口
- Web服务器父与子 Apache和Tomcat区别
- CentOS Linux防火墙配置及关闭
- 后缀树 后缀数组