本文共 1446 字,大约阅读时间需要 4 分钟。
1、
2、题目大意:
注意清空vector里的adj[];
状态转移方程:
dp[u][j]=max(dp[u][j],dp[u][j-k]+dp[v][k]);
其中dp[u][j]表示以u为根节点,选中其中的j个结点,v是u的子节点
3、题目:
Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4599 Accepted Submission(s): 2726
3 20 10 20 37 42 20 10 42 17 17 62 20 0
513
4、AC代码:(用vector建树)
#include#include using namespace std;#include #include #define N 205vector adj[N];int dp[N][N],m,w[N];void dfs(int u){ dp[u][1]=w[u]; for(int i=0;i =1;j--) { for(int k=1;k
AC代码(不用vector建树,省空间)
#include#include #include using namespace std;#define N 205int next[N],dp[N][N];int v[N],w[N],e,head[N],m;void add(int x,int y){ v[e]=y; next[e]=head[x]; head[x]=e++;}void dfs(int u){ dp[u][1]=w[u]; for(int i=head[u];i!=-1;i=next[i]) { int vv=v[i]; dfs(vv); for(int j=m+1;j>=1;j--) { for(int k=1;k
转载地址:http://nrddi.baihongyu.com/