很典型的树形DP,自己也理解了好久,感觉自己好水哦。。。。。。。。。。。。。。。。。。。。。。。。。所以讲得清楚一点,以后回忆起来也快题意:一颗树,n个点(1-n),n-1条边,每个点上有一个权值,求从1出发,走V步,最多能遍历到的权值我们把背包的思想用到这里来,做的步数相当于背包的容量,点上的权值相当于价值,给定一定的背包容量,求最多能装进背包的价值设dp[0][s][j]表示从s(当前根节点)出发,走 j 步,回到s所能获得的最大权值 dp[1][s][j]表示从s(当前根节点)出发,走j步,不回到s所能获得的最大权值现在我们就可以分配背包容量了:父节点与子节点分配背包容量,从而设计出状态 Read More
把最贵的先留着最后再买View Code #include<stdio.h>#include<string.h>int dp[1010];int p[1010];int max(int a,int b){ return a>b?a:b;}int main(){ int n,m,i,j,pos; while(scanf("%d",&n),n) { int Max=0; for(i=1;i<=n;i++) { scanf("%d",&p[i]); if(p[i]>Max) ... Read More