社区讨论

为什么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 条回复,欢迎继续交流。

正在加载回复...