标签:dba isp gif print namespace nbsp efi 背包 fine
树性背包O(NM)
#include<bits/stdc++.h> #define MAXN 2220 using namespace std; int dp[MAXN][MAXN],n,m,a[MAXN],b[MAXN]; vector<int> e[MAXN]; void dfs(int u,int f,int cost) { if(cost<=0)return ; for(int i=0;i<e[u].size();i++){ int v=e[u][i]; if(v==f)continue; for(int j=0;j<=cost;j++)dp[v][j]=dp[u][j]; dfs(v,u,cost-b[v]); for(int j=b[v];j<=cost;j++)dp[u][j]=max(dp[u][j],dp[v][j-b[v]]+a[v]); } } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d%d",&a[i],&b[i]); for(int i=1,u,v;i<n;i++) { scanf("%d%d",&u,&v); e[u].push_back(v); e[v].push_back(u); } e[0].push_back(1); dfs(0,0,m); int ans=0; for(int i=0;i<=m;i++) ans=max(ans,dp[0][i]); printf("%d\n",ans); }
标签:dba isp gif print namespace nbsp efi 背包 fine
原文地址:http://www.cnblogs.com/Amphetamine/p/7442332.html