如何查看网站收录情况沧州房产信息网
如何查看网站收录情况,沧州房产信息网,秀山网站建,禅城网站建设价格正题 题目大意
有n个东西#xff0c;每个东西有价值和价格#xff0c;然后要求一个价格上限#xff0c;和除了第一个东西以外都有一个买这个之前必须要买的东西。 求最大价值 解题思路
我们考虑之前的树形背包 然后发现时间复杂度O(n3)O(n^3)O(n3)#xff0c;之后我们考虑…正题 题目大意
有n个东西每个东西有价值和价格然后要求一个价格上限和除了第一个东西以外都有一个买这个之前必须要买的东西。 求最大价值 解题思路
我们考虑之前的树形背包 然后发现时间复杂度O(n3)O(n^3)O(n3)之后我们考虑一个方法 之前是将子节点合并起来所以时间会很久可是我们可以将一个子节点处理好然后直接仍给它的下一个兄弟这样就可以O(n2)O(n^2)O(n2)解决这个问题 code
#includecstdio
#includealgorithm
#define N 2010
using namespace std;
struct node{int to,next;
}a[N*2];
int n,m,dfn[N],size[N],ls[N],f[N][N],tot,cnt,v[N],p[N],x,y;
void addl(int x,int y)
{a[tot].toy;a[tot].nextls[x];ls[x]tot;
}
void dfs(int x,int fa)//计算dfs序和子树大小
{dfn[cnt]x;size[x]1;for(int ils[x];i;ia[i].next){int ya[i].to;if(yfa) continue;dfs(y,x);size[x]size[y];}
}
int main()
{scanf(%d%d,n,m);for(int i1;in;i)scanf(%d%d,v[i],p[i]);for(int i1;in;i){scanf(%d%d,x,y);addl(x,y);addl(y,x);}dfs(1,0);for(int in;i1;i--){int xdfn[i];for(int j0;jm;j) f[i][j]max(f[isize[x]][j],0);//继承兄弟for(int jp[x];jm;j)f[i][j]max(f[i][j],f[i1][j-p[x]]v[x]);//处理}printf(%d,max(0,f[1][m]));
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/87462.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!