为什么k要倒序???
查看原帖
为什么k要倒序???
361342
┭┮﹏┭┮楼主2021/12/16 19:36
#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;
}
#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了

2021/12/16 19:36
加载中...