社区讨论
为什么k要倒序???
P2015二叉苹果树参与者 3已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @lob5ro0t
- 此快照首次捕获于
- 2023/10/29 15:37 2 年前
- 此快照最后确认于
- 2023/11/03 21:56 2 年前
CPP
#include <iostream>
#include <cstdio>
const int N = 110;
using namespace std;
int n,q,f[N][N],a[N],head[N],tot,zb[N];
struct made{
int next,w,to;
}h[N*2];
void add(int x,int y,int z){
tot++;
h[tot] = {head[x],z,y},head[x] = tot;
}
void sou(int r,int fa){
for(int i = head[r];i;i = h[i].next){
int so = h[i].to;
if(so == fa)continue;
sou(so,r);
zb[r] += zb[so] + 1;
for(int j = min(zb[r],q);j;--j)
for(int k = min(zb[so],j-1);k >= 0;--k)//在这。。。
f[r][j] = max(f[r][j],f[r][j-k-1]+f[so][k]+h[i].w);
}
}
int main(){
scanf("%d %d",&n,&q);;
for(int i = 1;i < n;i++){
int x,y,z;
scanf("%d %d %d",&x,&y,&z);
add(x,y,z);
add(y,x,z);
}
sou(1,0);
printf("%d\n",f[1][q]);
return 0;
}
CPP#include <iostream>
#include <cstdio>
const int N = 110;
using namespace std;
int n,q,f[N][N],a[N],head[N],tot,zb[N];
struct made{
int next,w,to;
}h[N*2];
void add(int x,int y,int z){
tot++;
h[tot] = {head[x],z,y},head[x] = tot;
}
void sou(int r,int fa){
for(int i = head[r];i;i = h[i].next){
int so = h[i].to;
if(so == fa)continue;
sou(so,r);
zb[r] += zb[so] + 1;
for(int j = min(zb[r],q);j;--j)
for(int k = 0;k <= min(zb[so],j-1);++k)//在这。。
f[r][j] = max(f[r][j],f[r][j-k-1]+f[so][k]+h[i].w);
}
}
int main(){
scanf("%d %d",&n,&q);;
for(int i = 1;i < n;i++){
int x,y,z;
scanf("%d %d %d",&x,&y,&z);
add(x,y,z);
add(y,x,z);
}
sou(1,0);
printf("%d\n",f[1][q]);
return 0;
}
请问大佬为什么k也要倒序;
明明两个代码都AC了
回复
共 5 条回复,欢迎继续交流。
正在加载回复...