poj 2152树形dp
来源:互联网 发布:网络民族主义事件 编辑:程序博客网 时间:2024/05/17 09:32
最大的bug就是这里
for(int jj=1;jj<=num[rt];jj++){ tem[jj]=dp[rt][jj]; } for(int j=1;j<=num[rt];j++){ for(int k=0;k<=j;k++){ //dp[i][j]=max(dp[i][j],dp[i][j-k]+dp[son][k]-edge[i].w ); tem[j]=max(tem[j],dp[rt][j-k]+dp[son][k]-edge[i].w ); } } for(int jj=1;jj<=num[rt];jj++){ dp[rt][jj]=tem[jj]; }
#include<stdio.h>#include<algorithm>#include<string.h>#include<vector>#include<cmath>#include<iostream>using namespace std;typedef int ll;const ll inf=0x3f3f3f3f;const long long maxn=3010;int n,m;int head[maxn];int tot;void init(){ memset(head,-1,sizeof(head)); tot=0;}struct Edge{ int to,next,w;}edge[maxn];void addedge(int u,int v,int w){ edge[tot].to=v; edge[tot].w=w; edge[tot].next=head[u]; head[u]=tot++;}ll v[maxn];ll dp[maxn][maxn];ll num[maxn];ll tem[maxn];void dfs(int rt){ num[rt]=0; for(int i=head[rt];i!=-1;i=edge[i].next){ int son=edge[i].to; dfs(son); num[rt]+=num[son]; for(int jj=1;jj<=num[rt];jj++){ tem[jj]=dp[rt][jj]; } for(int j=1;j<=num[rt];j++){ for(int k=0;k<=j;k++){ //dp[i][j]=max(dp[i][j],dp[i][j-k]+dp[son][k]-edge[i].w ); tem[j]=max(tem[j],dp[rt][j-k]+dp[son][k]-edge[i].w ); } } for(int jj=1;jj<=num[rt];jj++){ dp[rt][jj]=tem[jj]; } } if(num[rt]==0){ dp[rt][1]=v[rt]; } num[rt]=num[rt]+1;}int main(){ // freopen("D://in.txt","r",stdin); while(scanf("%d%d",&n,&m)!=EOF){ init(); for(int i=0;i<n-m;i++){ int k,to,w; scanf("%d",&k); for(int j=0;j<k;j++){ scanf("%d%d",&to,&w); addedge(i+1,to,w); } } memset(v,0,sizeof(v)); for(int i=0;i<m;i++){ scanf("%d",&v[n-m+i+1]); } for(int i=0;i<maxn;i++){ for(int j=0;j<maxn;j++) dp[i][j]=-inf; dp[i][0]=0; } memset(num,0,sizeof(num)); dfs(1); int x=0; for(int i=m;i>=0;i--){ if(dp[1][i]>=0){ x=i;break; } } printf("%d\n",x); } return 0;}
0 0
- POJ 2152(树形DP)
- poj 2152树形dp
- POJ 2152 经典树形dp
- 【POJ 2152】Fire【树形DP】
- Fire - POJ 2152 树形dp
- poj 2152 Fire 树形dp
- poj 2152 Fire 树形DP
- 【树形DP】 POJ 2152 Fire
- [树形DP] POJ 2152 Fire
- Poj 2152 Fire (DP_树形DP)
- ***POJ 2152 - Fire(树形DP)
- poj 2152 Fire - 经典树形dp
- POJ 2152 Fire (树形DP,有趣)
- poj 2152 Fire(树形dp)
- poj 2152 Fire (树形dp)
- poj 1770 树形dp
- poj 3342 树形DP
- poj 2486 树形dp
- leetcode--118. Pascal's Triangle
- Android Canvas 画各种图形和Bitmap详解
- Ubuntu14.04 安装CUDA7.5 + Caffe + cuDNN
- Java注解(Annotation)实现原理
- 工作中用的一些小软件
- poj 2152树形dp
- 开发日志:准备开发ERP对接钉钉,对使用钉钉API简单可行性概述。
- 超声波引导系统开源(七)硬件设计
- 有关Pca的使用:样本数目和降维数目的关系
- openstack运维中mysql集群优化
- Android Material Design TabLayout入门篇<二>
- wafw00f 查看网络应用防火墙是否已启用
- SSM框架搭建,有程序,附带所需jar包
- Android版本和API Level对应关系 以及ADT中源码的关联