Loading docs/dp/tree.md +17 −21 Original line number Diff line number Diff line Loading @@ -91,13 +91,9 @@ $f$ 的第二维可以很轻松地用滚动数组的方式省略掉,注意这 我们可以证明,该做法的时间复杂度为 $O(nm)$ [^note1]。 ??? note "参考代码" #include <cstdio> #include <algorithm> using namespace std; \#include<cstdio>#include<algorithm>using namespace std; struct edge { int v,next; }e[305]; {int v,next;}e[305]; int head[305],f[305][305],cnt,s[305]; void addedge(int u,int v) { Loading @@ -116,7 +112,7 @@ $f$ 的第二维可以很轻松地用滚动数组的方式省略掉,注意这 //需要注意枚举的上下界 //一些状态本身是无意义的,故转移时不必考虑这些状态 for(int i=p;i;i--) for(int j=1;j<=now;j++) for(int j=1;j<=now;j++) f[a][i+j]=max(f[a][i+j],f[a][i]+f[v][j]); p+=now; } Loading @@ -126,7 +122,7 @@ $f$ 的第二维可以很轻松地用滚动数组的方式省略掉,注意这 { int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int i=1;i<=n;i++) { int u; scanf("%d%d",&u,&s[i]); Loading Loading
docs/dp/tree.md +17 −21 Original line number Diff line number Diff line Loading @@ -91,13 +91,9 @@ $f$ 的第二维可以很轻松地用滚动数组的方式省略掉,注意这 我们可以证明,该做法的时间复杂度为 $O(nm)$ [^note1]。 ??? note "参考代码" #include <cstdio> #include <algorithm> using namespace std; \#include<cstdio>#include<algorithm>using namespace std; struct edge { int v,next; }e[305]; {int v,next;}e[305]; int head[305],f[305][305],cnt,s[305]; void addedge(int u,int v) { Loading @@ -116,7 +112,7 @@ $f$ 的第二维可以很轻松地用滚动数组的方式省略掉,注意这 //需要注意枚举的上下界 //一些状态本身是无意义的,故转移时不必考虑这些状态 for(int i=p;i;i--) for(int j=1;j<=now;j++) for(int j=1;j<=now;j++) f[a][i+j]=max(f[a][i+j],f[a][i]+f[v][j]); p+=now; } Loading @@ -126,7 +122,7 @@ $f$ 的第二维可以很轻松地用滚动数组的方式省略掉,注意这 { int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int i=1;i<=n;i++) { int u; scanf("%d%d",&u,&s[i]); Loading